Pruebas en un entorno real
Pruebe en producción sin marcas de agua.
Funciona donde lo necesites.
Trabajar con archivos CSV puede ser una tarea difícil. Sin embargo, hoy en día hay muchas bibliotecas disponibles para ayudar a los desarrolladores con esta tarea, y sin necesidad de tener instalado Microsoft Excel.
En este artículo, vamos a discutir y comparar cómo trabajar con documentos de Microsoft Excel mediante programación en tecnologías C# .NET, ya sea en formato CSV o en el formato estándar de Excel, utilizando dos de las librerías más populares, IronXL y CSVWriter.
Veamos en primer lugar lo que ofrecen ambas bibliotecas.
IronXL es una librería .NET que facilita la lectura y edición de documentos Microsoft Excel con C#. IronXL. Excel es una biblioteca de software .NET independiente para leer una amplia gama de formatos de hojas de cálculo. No requiere la instalación de Microsoft Excel ni depende de Interop.
IronXL es una intuitiva API de C# que permite leer, editar y crear archivos de hojas de cálculo Excel en .NET con un rendimiento rapidísimo. IronXL es totalmente compatible con .NET Core, .NET Framework, Xamarin, Mobile, Linux, macOS y Azure.
IronXL es una biblioteca de hojas de cálculo de Excel para C# líder en .NET core y .net framework.
Una biblioteca .NET para escribir archivos CSV. Extremadamente rápido, flexible y fácil de usar. Permite escribir objetos de clase personalizados.
Siga los siguientes pasos para crear una Aplicación de Consola:
Seleccione Console App (.NET Framework) de las plantillas de proyecto mostradas.
Crear proyecto - Aplicación de consola
En la pantalla Información adicional, especifique la versión de Framework que desea utilizar. En este ejemplo utilizaremos .NET Framework 4.8.
Crear proyecto - .NET Framework
Haga clic en Crear para completar el proceso.
El proyecto ya está creado y casi estamos listos para probar las bibliotecas. Sin embargo, aún tenemos que instalarlos e integrarlos en nuestro proyecto. Primero instalemos IronXL.
Puede descargar e instalar la biblioteca IronXL mediante los siguientes métodos:
Instalación manual con la DLL
Analicemos cada uno de ellos.
Visual Studio proporciona el gestor de paquetes NuGet para instalar paquetes NuGet en sus proyectos. Puede acceder a él a través del menú Proyecto o haciendo clic con el botón derecho del ratón en el Explorador de soluciones.
Select-Manage-NuGet-Package
Ahora, desde la pestaña Examinar -> busca IronXL.Excel -> Instalar
Buscar IronXL
Para ello, visite directamente el sitio de NuGet y descargue el paquete. Los pasos son:
Otra forma de descargar e instalar la Biblioteca IronXL C# es hacer uso de los siguientes pasos para instalar el paquete IronXL NuGet a través del Símbolo del sistema del desarrollador.
PM > Install-Package IronXL.Excel
using IronXL;
using IronXL;
Imports IronXL
Todo hecho! IronXL está descargado, instalado y listo para usar. Sin embargo, antes debemos instalar CsvHelper.
Para trabajar con CSVWriter necesitas descargar e instalar la librería CsvHelper C# Library. Para ello, siga los siguientes pasos para instalar el paquete NuGet a través del símbolo del sistema del desarrollador.
PM> Install-Package CsvHelper -Version 27.2.1
Descárguelo del sitio web de NuGet: https://www.nuget.org/packages/CsvHelper/
Valores separados por comas (CSV) es un archivo de texto delimitado que utiliza una coma para separar los valores. Cada línea del fichero es un registro de datos. Manipular estos archivos para cálculos puede ser una tarea desafiante, pero IronXL provee una opción bastante buena y fácil para lograrlo, y sin usar Microsoft Excel. Convirtamos primero un archivo CSV en un archivo Excel normal.
El proceso es bastante sencillo y fácil. Suele hacerse con una línea de código.
**Formatos deCSV a Excel
WorkBook workbook = WorkBook.LoadCSV("test.csv", fileFormat: ExcelFileFormat.XLSX, ListDelimiter: ",");
WorkSheet ws = workbook.DefaultWorkSheet;
workbook.SaveAs("CsvToExcelConversion.xlsx");
WorkBook workbook = WorkBook.LoadCSV("test.csv", fileFormat: ExcelFileFormat.XLSX, ListDelimiter: ",");
WorkSheet ws = workbook.DefaultWorkSheet;
workbook.SaveAs("CsvToExcelConversion.xlsx");
Dim workbook As WorkBook = WorkBook.LoadCSV("test.csv", fileFormat:= ExcelFileFormat.XLSX, ListDelimiter:= ",")
Dim ws As WorkSheet = workbook.DefaultWorkSheet
'
workbook.SaveAs("CsvToExcelConversion.xlsx")
La clase IronXL WorkBook representa una hoja de Excel. Para abrir un archivo Excel utilizando C#, utilizamos WorkBook.Load y especificamos la ruta del archivo Excel (.xlsx). El siguiente código de una línea se utiliza para abrir el archivo para su lectura:
//Load WorkBook
var workbook = WorkBook.Load(@"Spreadsheets\\sample.xlsx");
//Load WorkBook
var workbook = WorkBook.Load(@"Spreadsheets\\sample.xlsx");
'Load WorkBook
Dim workbook = WorkBook.Load("Spreadsheets\\sample.xlsx")
Cada WorkBook puede contener varios objetos WorkSheet. Representan hojas de trabajo en el documento Excel. Si el libro contiene hojas de cálculo, recupérelas por nombre de la siguiente manera:
//Open Sheet for reading
var worksheet = workbook.GetWorkSheet("sheetnamegoeshere");
//Open Sheet for reading
var worksheet = workbook.GetWorkSheet("sheetnamegoeshere");
'Open Sheet for reading
Dim worksheet = workbook.GetWorkSheet("sheetnamegoeshere")
Código para leer los valores de las celdas:
// Read from Ranges of cells elegantly.
foreach (var cell in worksheet ["A2:A10"])
{
Console.WriteLine("Cell {0} has value '{1}'", cell.AddressString, cell.Text);
}
// Read from Ranges of cells elegantly.
foreach (var cell in worksheet ["A2:A10"])
{
Console.WriteLine("Cell {0} has value '{1}'", cell.AddressString, cell.Text);
}
' Read from Ranges of cells elegantly.
For Each cell In worksheet ("A2:A10")
Console.WriteLine("Cell {0} has value '{1}'", cell.AddressString, cell.Text)
Next cell
Después de cargar y leer el libro y la hoja de trabajo, se puede utilizar el siguiente ejemplo de código para realizar cambios en las fórmulas o aplicarlos a celdas específicas. El código es el siguiente:
// Set Formulas
worksheet ["A1"].Formula = "Sum(B8:C12)";
worksheet ["B8"].Formula = "=C9/C11";
worksheet ["G30"].Formula = "Max(C3:C7)";
// Force recalculate all formula values in all sheets.
workbook.EvaluateAll();
// Set Formulas
worksheet ["A1"].Formula = "Sum(B8:C12)";
worksheet ["B8"].Formula = "=C9/C11";
worksheet ["G30"].Formula = "Max(C3:C7)";
// Force recalculate all formula values in all sheets.
workbook.EvaluateAll();
' Set Formulas
worksheet ("A1").Formula = "Sum(B8:C12)"
worksheet ("B8").Formula = "=C9/C11"
worksheet ("G30").Formula = "Max(C3:C7)"
'
' Force recalculate all formula values in all sheets.
workbook.EvaluateAll()
Escribir archivos CSV es un proceso fácil con IronXL. El siguiente código simplemente guarda el archivo Excel en formato CSV utilizando el método SaveAsCsv.
WorkBook wb = WorkBook.Load("Normal_Excel_File.xlsx");
//Import .xls, .csv, or .tsv file
wb.SaveAsCsv("SaveAsCSV.csv", ",");
//Saved as : SaveAsCSV.Sheet1.csv
WorkBook wb = WorkBook.Load("Normal_Excel_File.xlsx");
//Import .xls, .csv, or .tsv file
wb.SaveAsCsv("SaveAsCSV.csv", ",");
//Saved as : SaveAsCSV.Sheet1.csv
Dim wb As WorkBook = WorkBook.Load("Normal_Excel_File.xlsx")
'Import .xls, .csv, or .tsv file
wb.SaveAsCsv("SaveAsCSV.csv", ",")
'Saved as : SaveAsCSV.Sheet1.csv
Escribir datos en un archivo CSV es una operación habitual. CSVHelper método CSVWriter con separador suministrado todos los caracteres y caracteres de nueva línea puede ser manejado en un escritor CSV muy simple liberado para C#. Aquí vamos a ver cómo escribir datos utilizando CSVWriter.
Cree una simple aplicación de consola CSVWriter con separador suministrado utilizando Visual Studio. Una vez creado el proyecto, el siguiente paso es crear una clase Persona:
public class Person
{
public int Id { get; set; }
public string Name { get; set; }
public bool IsLiving { get; set; }
}
public class Person
{
public int Id { get; set; }
public string Name { get; set; }
public bool IsLiving { get; set; }
}
Public Class Person
Public Property Id() As Integer
Public Property Name() As String
Public Property IsLiving() As Boolean
End Class
Dentro del método Main, hagamos ahora una lista de objetos Persona que escribiremos en el fichero CSV:
var myPersonObjects = new List<Person>()
{
new Person { Id = 1, IsLiving = true, Name = "John" },
new Person { Id = 2, IsLiving = true, Name = "Steve" },
new Person { Id = 3, IsLiving = true, Name = "James" }
};
var myPersonObjects = new List<Person>()
{
new Person { Id = 1, IsLiving = true, Name = "John" },
new Person { Id = 2, IsLiving = true, Name = "Steve" },
new Person { Id = 3, IsLiving = true, Name = "James" }
};
Dim myPersonObjects = New List(Of Person)() From {
New Person With {
.Id = 1,
.IsLiving = True,
.Name = "John"
},
New Person With {
.Id = 2,
.IsLiving = True,
.Name = "Steve"
},
New Person With {
.Id = 3,
.IsLiving = True,
.Name = "James"
}
}
CsvHelper ha surgido como la forma estándar de escribir CSV en C# utilizando el método CSVWriter, y es muy fácil de usar:
using (var writer = new StreamWriter("filePersons.csv"))
using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture))
{
csv.WriteRecords(myPersonObjects);
}
using (var writer = new StreamWriter("filePersons.csv"))
using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture))
{
csv.WriteRecords(myPersonObjects);
}
Using writer = New StreamWriter("filePersons.csv")
Using csv = New CsvWriter(writer, CultureInfo.InvariantCulture)
csv.WriteRecords(myPersonObjects)
End Using
End Using
Debemos tener en cuenta que cada vez que ejecutemos nuestro programa, se sobrescribirán los archivos CSV antiguos. A veces queremos que los datos se añadan al final de un archivo, en lugar de sobrescribir los datos existentes. CSVWriter no proporciona un método para hacer esto, ya que abrir/escribir un archivo no es responsabilidad de CSVWriter con separador suministrado. Podemos conseguirlo utilizando un FileStream, y luego construyendo nuestro StreamWriter utilizando ese FileStream. Aunque esto no entra en el ámbito de este artículo, te mostraré cómo hacerlo, ya que es una parte integral de cualquier aplicación.
var configPersons = new CsvConfiguration(CultureInfo.InvariantCulture)
{
HasHeaderRecord = false
};
using (var stream = File.Open("filePersons.csv", FileMode.Append))
using (var writer = new StreamWriter(stream))
using (var csv = new CsvWriter(writer, configPersons))
{
csv.WriteRecords(myPersonObjects);
}
var configPersons = new CsvConfiguration(CultureInfo.InvariantCulture)
{
HasHeaderRecord = false
};
using (var stream = File.Open("filePersons.csv", FileMode.Append))
using (var writer = new StreamWriter(stream))
using (var csv = new CsvWriter(writer, configPersons))
{
csv.WriteRecords(myPersonObjects);
}
Dim configPersons = New CsvConfiguration(CultureInfo.InvariantCulture) With {.HasHeaderRecord = False}
Using stream = File.Open("filePersons.csv", FileMode.Append)
Using writer = New StreamWriter(stream)
Using csv = New CsvWriter(writer, configPersons)
csv.WriteRecords(myPersonObjects)
End Using
End Using
End Using
Sin embargo, añadir a un archivo existente es complicado, ya que el orden puede haber cambiado al añadir, o puede que hayamos añadido nuevas propiedades. Deberíamos tenerlo en cuenta a la hora de añadir.
IronXL es un producto abiertamente comercial Biblioteca Excel en C. Es gratuito para el desarrollo y siempre se puede obtener una licencia para su implantación comercial.Licencias disponibles para uso en un solo proyecto, desarrolladores individuales, agencias y corporaciones globales, así como SaaS y redistribución OEM. Todas las licencias incluyen una garantía de devolución del dinero de 30 días, un año de asistencia técnica y actualizaciones del producto, validez para desarrollo/montaje/producción y también una licencia permanente. (compra única). El paquete Lite parte de $599.
CSVWriter con separador suministrado es un elemento separado por comas y completamente gratuito para uso comercial.
IronXL es una completa biblioteca que ofrece todo lo necesario para poder manipular un archivo Excel. Le ofrece la posibilidad de convertir varios formatos a XLSX, y también de XLSX a otros formatos, como CSV. Esta interconversión proporciona a los usuarios la flexibilidad necesaria para manipular otros formatos de archivo con facilidad.
Por otro lado, CSVWriter sólo funciona con formatos de archivo CSV y con opciones muy limitadas. Los usuarios no pueden cambiar entre distintos formatos de archivo, mientras que con IronXL sí pueden. Todos los ejemplos de código se encuentran en los archivos de documentación de CsvHelper. Este documento proporciona directrices sobre cómo utilizar CSVWriter en su proyecto.
IronXL tiene una clara ventaja sobre CSVHelper.CSVWriter, ya que permite trabajar con múltiples formatos. Además, puede aplicar fórmulas y estilos según su elección, mientras que CsvHelper sólo permite leer y escribir archivos CSV, y con opciones limitadas. Además, no se pueden añadir nuevos registros a un archivo CSV existente, ya que simplemente se sobrescriben las entradas anteriores.
9 productos API .NET para sus documentos de oficina