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. Hoy en día existen muchas bibliotecas que ayudan a los desarrolladores en esta tarea 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 C# .NET Technologies, ya sea en formato CSV o en formato estándar XLSX, utilizando dos de las librerías más populares, IronXL y CsvHelper.
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 tener instalado Microsoft Excel ni depende de Interop. Funciona sin problemas con archivos CSV.
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 leer y escribir archivos CSV. Extremadamente rápido, flexible y fácil de usar. Admite la lectura y escritura de objetos de clase personalizados. Todos los códigos de ejemplo están disponibles en el paquete CsvHelper documentation install.
CsvConfiguración
para establecer la configuración de CSVStreamReader
CsvReader
clase para leerConversorTipoPredeterminado
claseSiga los siguientes pasos para crear una Aplicación de Consola:
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:
Uso de Visual Studio con paquetes NuGet
Descargue directamente el paquete NuGet
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
En el Explorador de soluciones, haga clic con el botón derecho en el archivo Program.cs y, a continuación, haga clic en Ver código.
using IronXL;
using IronXL;
Imports IronXL
Todo hecho! IronXL está descargado, instalado y listo para usar. Sin embargo, antes debemos instalar CsvHelper.
Para descargar e instalar la librería CsvHelper C#, 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, y IronXL provee una opción bastante buena y fácil para hacerlo sin 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
La lectura de archivos CSV es una de esas tareas que parecen mucho más fáciles de lo que realmente son. La biblioteca CsvHelper facilita la escritura de código seguro, rápido y flexible.
Este es el archivo CSV de ejemplo, tiene tres columnas de texto y una columna numérica.
FirstName,LastName,Age,IsActive
Ali,Talal,30,Yes
Affan,Ahmad,31,No
Saad,Bhatti,31,Yes
FirstName,LastName,Age,IsActive
Ali,Talal,30,Yes
Affan,Ahmad,31,No
Saad,Bhatti,31,Yes
'INSTANT VB TODO TASK: The following line uses invalid syntax:
'FirstName,LastName,Age,IsActive Ali,Talal,30,Yes Affan,Ahmad,31,No Saad,Bhatti,31,Yes
Asignaremos cada fila a un objeto de tipo Persona.
public class Person
{
public string FirstName { get; set; }
public string LastName { get; set; }
public int? Age { get; set; }
public string IsActive { get; set; }
}
public class Person
{
public string FirstName { get; set; }
public string LastName { get; set; }
public int? Age { get; set; }
public string IsActive { get; set; }
}
Public Class Person
Public Property FirstName() As String
Public Property LastName() As String
Public Property Age() As Integer?
Public Property IsActive() As String
End Class
El código para leer nuestro archivo CSV se encuentra a continuación.
var fileName = @"<path to our CSV file>";
var configuration = new CsvConfiguration(CultureInfo.InvariantCulture)
{
Encoding = Encoding.UTF8,
Delimiter = ","
};
using (var fs = File.Open(fileName, FileMode.Open, FileAccess.Read, FileShare.Read))
{
using (var textReader = new StreamReader(fs, Encoding.UTF8))
using (var csv = new CsvReader(textReader, configuration))
{
var data = csv.GetRecords<Person>();
foreach (var person in data)
{
// Do something with values in each row
}
}
}
var fileName = @"<path to our CSV file>";
var configuration = new CsvConfiguration(CultureInfo.InvariantCulture)
{
Encoding = Encoding.UTF8,
Delimiter = ","
};
using (var fs = File.Open(fileName, FileMode.Open, FileAccess.Read, FileShare.Read))
{
using (var textReader = new StreamReader(fs, Encoding.UTF8))
using (var csv = new CsvReader(textReader, configuration))
{
var data = csv.GetRecords<Person>();
foreach (var person in data)
{
// Do something with values in each row
}
}
}
Dim fileName = "<path to our CSV file>"
Dim configuration = New CsvConfiguration(CultureInfo.InvariantCulture) With {
.Encoding = Encoding.UTF8,
.Delimiter = ","
}
Using fs = File.Open(fileName, FileMode.Open, FileAccess.Read, FileShare.Read)
Using textReader = New StreamReader(fs, Encoding.UTF8)
Using csv = New CsvReader(textReader, configuration)
Dim data = csv.GetRecords(Of Person)()
For Each person In data
' Do something with values in each row
Next person
End Using
End Using
End Using
El tipo de datos es IEnumerable
Los archivos CSV contienen principalmente datos de texto. Por ejemplo, la columna de edad es un valor entero y el archivo CSV sólo contiene texto. CsvHelper puede convertir datos de cadena en tipos .NET estándar(Booleano, Int32, Int64, Enum). En nuestro caso, tenemos un tipo de dato bool IsActive, que sólo puede tener Verdadero/Falso, y contiene valores no estándar. Se puede convertir creando un conversor personalizado. El estilo del código es el siguiente:
public class CustomBooleanConverter : DefaultTypeConverter
{
public override object ConvertFromString(string text, IReaderRow row, MemberMapData memberMapData)
{
return text.Equals("Yes", StringComparison.OrdinalIgnoreCase);
}
}
public class CustomBooleanConverter : DefaultTypeConverter
{
public override object ConvertFromString(string text, IReaderRow row, MemberMapData memberMapData)
{
return text.Equals("Yes", StringComparison.OrdinalIgnoreCase);
}
}
Public Class CustomBooleanConverter
Inherits DefaultTypeConverter
Public Overrides Function ConvertFromString(ByVal text As String, ByVal row As IReaderRow, ByVal memberMapData As MemberMapData) As Object
Return text.Equals("Yes", StringComparison.OrdinalIgnoreCase)
End Function
End Class
Aunque bool es un tipo .NET estándar, el conversor por defecto sólo puede manejar valores True/False, mientras que nuestro archivo CSV tiene Yes/No. Aquí, tenemos que subclasificar el DefaultTypeConverter, a continuación, anular el método ConvertFromString.
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 $749.
CsvHelper - lectura y escritura de archivos CSV, es completamente gratuito para uso comercial.
IronXL es una completa biblioteca que ofrece todo lo necesario para poder manipular un archivo Excel. Es fácil de usar y le ofrece la posibilidad de convertir varios formatos a XLSX, así como de XLSX a otros formatos, como CSV. Esta interconversión ofrece al usuario flexibilidad para trabajar con varios formatos de archivo con facilidad.
Por otro lado, CsvHelper está diseñado específicamente para trabajar con formatos de archivo CSV, lo que significa que sólo puede tratar con archivos CSV. Todos los ejemplos de código se encuentran en los archivos de documentación de CsvHelper. La documentación le proporciona directrices sobre cómo utilizar CsvHelper en su proyecto.
IronXL tiene una clara ventaja sobre CsvHelper, ya que permite a los usuarios 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 con opciones limitadas. Además, no puede añadir nuevos registros a un archivo CSV existente, ya que simplemente sobrescribe las entradas anteriores.
9 productos API .NET para sus documentos de oficina