COMPARACIóN CON OTROS COMPONENTES

Comparación entre IronXL y CsvHelper

Chaknith Bin
Chaknith Bin
9 de mayo, 2022
Compartir:

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.

Biblioteca IronXL

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.

Características de IronXL

  • Carga, lectura y edición de datos - desde XLS/XLSX/CSV/TSV
  • Guardar y exportar - a XLS/XLSX/CSV/TSV/JSON
  • Rangos: sintaxis de WorkSheet ["A1:B10"] fácil de usar. Combine y cree gamas de forma intuitiva.
  • Ordenar - ordenar rangos, columnas y filas.
  • Estilización: estilos visuales de celda, fuente, tamaño, patrón de fondo, borde, alineación y formatos de número.

CsvHelper

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.

Características de CsvHelper

  • Rápido: compila las clases sobre la marcha para un rendimiento extremadamente rápido.
  • Flexible: conservador al escribir, liberal al leer
  • Fácil de usar: leer y escribir son tan simples como GetRecords() y WriteRecords(records)
  • Altamente configurable
  • Modo Linux
  • Bajo consumo de memoria

1. Crear una aplicación de consola

Siga los siguientes pasos para crear una Aplicación de Consola:

  • Inicie el IDE de Visual Studio 2022.
  • Haz clic en "Crear nuevo proyecto".
  • En la página de "Crear nuevo proyecto", selecciona C# en la lista desplegable de idiomas, Windows de la lista de Plataformas, y Consola de la lista de "Tipos de proyectos".
  • Seleccione Aplicación de Consola (.NET Framework) de las plantillas de proyecto mostradas.
    Csvhelper Alternatives 1 related to 1. Crear una aplicación de consola

    Crear proyecto - Aplicación de consola

  • Haz clic en Siguiente.
  • En la pantalla de Información Adicional, especifique la versión del Framework que desea utilizar. Usaremos .NET Framework 4.8 en este ejemplo.

    Csvhelper Alternatives 2 related to 1. Crear una aplicación de consola

    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.

2. IronXL C# Instalación de la biblioteca

Puede descargar e instalar la biblioteca IronXL mediante los siguientes métodos:

  1. Uso de Visual Studio con paquetes NuGet

  2. Descargue directamente el paquete NuGet

  3. Instalación manual con la DLL

    Analicemos cada uno de ellos.

2.1. Uso de Visual Studio con paquetes NuGet

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.

Csvhelper Alternatives 3 related to 2.1. Uso de Visual Studio con paquetes NuGet

Seleccionar-Administrar-Paquete-NuGet

  • Ahora, desde la pestaña Examinar -> busca IronXL.Excel -> Instalar

    Csvhelper Alternatives 4 related to 2.1. Uso de Visual Studio con paquetes NuGet

    Buscar IronXL

  • Y hemos terminado.

2.2. Descargue directamente el paquete NuGet

Para ello, visite directamente el sitio de NuGet y descargue el paquete. Los pasos son:

2.3. Instalación manual con la DLL

Otra forma de descargar e instalar la biblioteca de IronXL C# es utilizar los siguientes pasos para instalar el paquete NuGet de IronXL a través del Símbolo del sistema para desarrolladores.

  • Abra el Solicitud de comando para desarrolladores, que generalmente se encuentra en la carpeta de Visual Studio.
  • Escriba el siguiente comando: PM > Install-Package IronXL.Excel
  • Pulse Intro
  • Esto descargará e instalará el paquete
  • Recarga tu proyecto de Visual Studio y empieza a utilizarlo

2.4. Añadir las directivas de uso necesarias

  1. 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.

  2. Añada las siguientes directivas de uso al principio del archivo de código:
using IronXL;
using IronXL;
Imports IronXL
$vbLabelText   $csharpLabel

¡Todo listo! IronXL está descargado, instalado y listo para usar. Sin embargo, antes debemos instalar CsvHelper.

3. Instalación de CsvHelper

3.1. Uso de la consola del gestor de paquetes NuGet

Para descargar e instalar la Biblioteca C# CsvHelper, utilice los siguientes pasos para instalar el paquete NuGet a través del Símbolo del sistema del desarrollador.

  • Abra el Solicitud de comando para desarrolladores, que generalmente se encuentra en la carpeta de Visual Studio.
  • Escriba el siguiente comando: PM> Install-Package CsvHelper -Version 27.2.1
  • Pulse Intro
  • Esto descargará e instalará el paquete
  • Recarga tu proyecto de Visual Studio y empieza a utilizarlo

3.2. Descarga directa

Descargar desde el sitio web de NuGet: [https://www.nuget.org/packages/CsvHelper/](https://www.nuget.org/packages/CsvHelper/" rel="nofollow noopener noreferrer" target="_blank)

4. Trabajando con Archivos CSV usando IronXL

Un archivo de 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.

4.1. Conversión de un archivo CSV a formato Excel

El proceso es bastante sencillo y fácil. Suele hacerse con una línea de código.

De CSV a formatos de 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")
$vbLabelText   $csharpLabel

4.2. Leer y manipular archivos CSV convertidos usando IronXL

La clase IronXL WorkBook representa una hoja de Excel. Para abrir un archivo de Excel utilizando C#, usamos WorkBook.Load y especificamos la ruta del archivo de 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")
$vbLabelText   $csharpLabel

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")
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

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()
$vbLabelText   $csharpLabel

4.3. Guardar el documento Excel en un archivo CSV

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
$vbLabelText   $csharpLabel

5. Trabajar con archivos CSV utilizando CsvHelper

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.

5.1. Leer archivos CSV con CsvHelper

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
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

El tipo de datos es IEnumerable. CsvHelper asignará automáticamente cada columna a la propiedad con el mismo nombre. Por ejemplo, el valor de la columna FirstName se asignará a Person.FirstName. A continuación, podemos iterar los datos y acceder a los valores de cada fila.

5.2. Convertir datos de archivos CSV de un tipo a otro

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 cadenas a tipos estándar de .NET (Boolean, 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
$vbLabelText   $csharpLabel

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.

6. Licencias

IronXL es una biblioteca Excel de C# abiertamente comercial. Es gratuito para el desarrollo y siempre se puede licenciar para implementación comercial. [Licencias disponibles](/csharp/excel/licensing/" target="_blank) para uso en un solo proyecto, desarrolladores individuales, agencias y corporaciones globales, así como para la redistribución SaaS y OEM. Todas las licencias incluyen una garantía de devolución de dinero de 30 días, un año de soporte y actualizaciones del producto, validez para desarrollo/staging/producción y también una licencia permanente (compra única). El paquete Lite comienza desde $749.

CsvHelper - lectura y escritura de archivos CSV, es completamente gratuito para uso comercial.

7. 7. Resumen y conclusiones

Resumen

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.

Conclusión

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.

Chaknith Bin
Ingeniero de software
Chaknith trabaja en IronXL e IronBarcode. Tiene una gran experiencia en C# y .NET, ayudando a mejorar el software y a apoyar a los clientes. Sus conocimientos de las interacciones con los usuarios contribuyen a mejorar los productos, la documentación y la experiencia general.
< ANTERIOR
Comparación entre IronXL y CsvWriter
SIGUIENTE >
Comparación de IronXL y NPOI