Saltar al pie de página
COMPARAR CON OTROS COMPONENTES

Una comparación entre IronXL y CsvHelper

Trabajar con archivos CSV puede ser una tarea desafiante. Hoy en día, hay muchas bibliotecas disponibles para ayudar a los desarrolladores con esta tarea sin la necesidad de tener Microsoft Excel instalado.

En este artículo, vamos a discutir y comparar cómo trabajar con documentos de Microsoft Excel programáticamente en tecnologías C# .NET, ya sea en formato CSV o formato estándar XLSX, utilizando dos de las bibliotecas más populares, IronXL y CsvHelper.

Veamos primero lo que ambas bibliotecas tienen para ofrecer.

La biblioteca IronXL

IronXL es una biblioteca .NET que facilita la lectura y edición de documentos de 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 que Microsoft Excel esté instalado, ni depende de Interop. Funciona muy bien con archivos CSV.

IronXL es una API intuitiva de C# que te permite leer, editar y crear archivos de hojas de cálculo de Excel en .NET con un rendimiento extremadamente rápido. IronXL es compatible con .NET Core, .NET Framework, Xamarin, Mobile, Linux, macOS y Azure.

IronXL es una biblioteca líder de hojas de cálculo de Excel para .NET Core y .NET Framework para C#.

Conjunto de características de IronXL

  • Cargar, leer y editar datos — de XLS/XLSX/CSV/TSV
  • Guardar y exportar — a XLS/XLSX/CSV/TSV/JSON
  • Rangos — sintaxis fácil de usar WorkSheet["A1:B10"]. Combina y crea rangos de manera intuitiva.
  • Ordenar — ordenar rangos, columnas y filas.
  • Estilos — estilos visuales de celdas, fuente, tamaño, patrón de fondo, borde, alineación y formatos de número.

Ayudante de CSV

Una biblioteca .NET para leer y escribir archivos CSV. Extremadamente rápida, flexible y fácil de usar. Soporta la lectura y escritura de objetos de clase personalizados. Todos los códigos de ejemplo están disponibles en la documentación del paquete CsvHelper.

Funciones de CsvHelper

  • Rápido: compila clases en el vuelo 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
  • Uso de memoria baja

1. Crear una aplicación de consola

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

  • Inicia el IDE de Visual Studio 2022.
  • Haz clic en "Crear nuevo proyecto".
  • En la página "Crear nuevo proyecto", selecciona C# en la lista desplegable de idioma, Windows en la lista de Plataformas y Consola en la lista de "Tipos de proyecto".
  • Selecciona 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, especifica la versión del Framework que te gustaría usar. Usaremos .NET Framework 4.8 en este ejemplo.
Csvhelper Alternatives 2 related to 1. Crear una aplicación de consola

Crear proyecto - .NET Framework

  • Haz clic en Crear para completar el proceso.

El proyecto ahora está creado y estamos casi listos para probar las bibliotecas. Sin embargo, aún necesitamos instalarlas e integrarlas en nuestro proyecto. Instalemos IronXL primero.

2. Instalación de la biblioteca IronXL C

Puedes descargar e instalar la biblioteca IronXL utilizando los siguientes métodos:

  1. Usar Visual Studio con paquetes de NuGet
  2. Descargando el Paquete NuGet directamente
  3. Instalar manualmente con el DLL

Echemos un vistazo más de cerca a cada uno.

2.1. Uso de Visual Studio con paquetes NuGet

Visual Studio proporciona el Administrador de Paquetes NuGet para instalar paquetes NuGet en tus proyectos. Puedes acceder a él a través del menú Proyecto, o haciendo clic derecho en tu proyecto 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 de navegación -> 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. Descargar el paquete NuGet directamente

Esto se puede hacer visitando el sitio de NuGet directamente y descargando el paquete. Los pasos son:

2.3. Instalación manual con la DLL

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

  • Abre el Símbolo del sistema del desarrollador, generalmente encontrado en la carpeta de Visual Studio.
  • Escribe el siguiente comando: PM> Install-Package IronXL.Excel
  • Presiona Enter
  • Esto descargará e instalará el paquete
  • Recarga tu proyecto de Visual Studio y comienza a usarlo

2.4. Agregar directivas de uso necesarias

  1. En el Explorador de Soluciones, haz clic derecho en el archivo Program.cs y luego haz clic en Ver Código.
  2. Añade las siguientes directivas de uso en la parte superior 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 de eso, debemos instalar CsvHelper.

3. Instalación de CsvHelper

3.1. Uso de la consola del administrador de paquetes NuGet

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

  • Abre el Símbolo del sistema del desarrollador, generalmente encontrado en la carpeta de Visual Studio.
  • Escribe el siguiente comando: PM> Install-Package CsvHelper -Version 27.2.1
  • Presiona Enter
  • Esto descargará e instalará el paquete
  • Recarga tu proyecto de Visual Studio y comienza a usarlo

3.2. Descarga directa

Descarga desde el sitio de NuGet: https://www.nuget.org/packages/CsvHelper.

4. Trabajar con archivos CSV con 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 archivo es un registro de datos. Manipular estos archivos para cálculos puede ser una tarea desafiante, y IronXL proporciona una opción bastante buena y fácil para hacerlo sin Microsoft Excel. Primero vamos a convertir un archivo CSV a un archivo de Excel normal.

4.1. Convertir un archivo CSV a formato Excel

El proceso es bastante simple y fácil. Generalmente se hace con una línea de código.

CSV a formatos de Excel:

// Load the CSV file and convert it to an Excel format
WorkBook workbook = WorkBook.LoadCSV("test.csv", fileFormat: ExcelFileFormat.XLSX, ListDelimiter: ",");
// Access the default worksheet
WorkSheet ws = workbook.DefaultWorkSheet;

// Save the workbook as an Excel file
workbook.SaveAs("CsvToExcelConversion.xlsx");
// Load the CSV file and convert it to an Excel format
WorkBook workbook = WorkBook.LoadCSV("test.csv", fileFormat: ExcelFileFormat.XLSX, ListDelimiter: ",");
// Access the default worksheet
WorkSheet ws = workbook.DefaultWorkSheet;

// Save the workbook as an Excel file
workbook.SaveAs("CsvToExcelConversion.xlsx");
' Load the CSV file and convert it to an Excel format
Dim workbook As WorkBook = WorkBook.LoadCSV("test.csv", fileFormat:= ExcelFileFormat.XLSX, ListDelimiter:= ",")
' Access the default worksheet
Dim ws As WorkSheet = workbook.DefaultWorkSheet

' Save the workbook as an Excel file
workbook.SaveAs("CsvToExcelConversion.xlsx")
$vbLabelText   $csharpLabel

4.2. Leer y manipular archivos CSV convertidos con IronXL

La clase WorkBook de IronXL representa una hoja de Excel. Para abrir un archivo de Excel usando C#, utilizamos WorkBook.Load y especificamos la ruta del archivo de Excel (.xlsx). La siguiente línea de código se utiliza para abrir el archivo para 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 múltiples objetos WorkSheet. Estos representan las hojas de trabajo en el documento de Excel. Si el libro contiene hojas de trabajo, recupéralas por nombre de la siguiente manera:

// Open the sheet for reading
var worksheet = workbook.GetWorkSheet("sheetnamegoeshere");
// Open the sheet for reading
var worksheet = workbook.GetWorkSheet("sheetnamegoeshere");
' Open the 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 de trabajo y la hoja de trabajo, se puede usar el siguiente ejemplo de código para realizar cambios en las fórmulas o aplicarlas a celdas específicas. El código es el siguiente:

// Set formulas in specific cells
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 in specific cells
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 in specific cells
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 de Excel como archivo CSV

Escribir archivos CSV es un proceso fácil con IronXL. El siguiente código simplemente guarda el archivo de Excel en formato CSV utilizando el método SaveAsCsv.

// Load the Excel Workbook
WorkBook wb = WorkBook.Load("Normal_Excel_File.xlsx");

// Save the workbook as a CSV file
wb.SaveAsCsv("SaveAsCSV.csv", ",");
// This will save as "SaveAsCSV.Sheet1.csv"
// Load the Excel Workbook
WorkBook wb = WorkBook.Load("Normal_Excel_File.xlsx");

// Save the workbook as a CSV file
wb.SaveAsCsv("SaveAsCSV.csv", ",");
// This will save as "SaveAsCSV.Sheet1.csv"
' Load the Excel Workbook
Dim wb As WorkBook = WorkBook.Load("Normal_Excel_File.xlsx")

' Save the workbook as a CSV file
wb.SaveAsCsv("SaveAsCSV.csv", ",")
' This will save as "SaveAsCSV.Sheet1.csv"
$vbLabelText   $csharpLabel

5. Trabajar con archivos CSV usando CsvHelper

Leer archivos CSV es una de esas tareas que parecen más fáciles de lo que realmente son. La biblioteca CsvHelper hace que sea fácil escribir código que sea seguro a nivel de tipo, 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 de número.

FirstName,LastName,Age,IsActive
Ali,Talal,30,Yes
Affan,Ahmad,31,No
Saad,Bhatti,31,Yes

Mapearemos cada fila en un objeto de tipo Person.

// Define the Person class to map CSV records
public class Person
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public int? Age { get; set; }
    public string IsActive { get; set; }
}
// Define the Person class to map CSV records
public class Person
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public int? Age { get; set; }
    public string IsActive { get; set; }
}
' Define the Person class to map CSV records
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 está abajo.

// Define the path to the CSV file
var fileName = @"<path to our CSV file>";

// Configure CsvHelper
var configuration = new CsvConfiguration(CultureInfo.InvariantCulture)
{
    Encoding = Encoding.UTF8,
    Delimiter = ","
};

// Read CSV file
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>();

        // Iterate over each person record
        foreach (var person in data)
        {
            // Process each Person object
        }
    }
}
// Define the path to the CSV file
var fileName = @"<path to our CSV file>";

// Configure CsvHelper
var configuration = new CsvConfiguration(CultureInfo.InvariantCulture)
{
    Encoding = Encoding.UTF8,
    Delimiter = ","
};

// Read CSV file
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>();

        // Iterate over each person record
        foreach (var person in data)
        {
            // Process each Person object
        }
    }
}
' Define the path to the CSV file
Dim fileName = "<path to our CSV file>"

' Configure CsvHelper
Dim configuration = New CsvConfiguration(CultureInfo.InvariantCulture) With {
	.Encoding = Encoding.UTF8,
	.Delimiter = ","
}

' Read CSV file
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)()

		' Iterate over each person record
		For Each person In data
			' Process each Person object
		Next person
	End Using
	End Using
End Using
$vbLabelText   $csharpLabel

El tipo de data es IEnumerable<Person>. CsvHelper mapeará automáticamente cada columna a la propiedad con el mismo nombre. Por ejemplo, el valor en la columna FirstName se mapeará a Person.FirstName. Entonces podemos iterar data y acceder a los valores en cada fila.

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

Los archivos CSV contienen datos de texto. Por ejemplo, la columna de edad es un valor entero y el archivo CSV contiene solo 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 solo puede tener un True/False, y contiene valores no estándar. Se puede convertir creando un convertidor personalizado. La estilización del código es la siguiente:

// Custom Boolean Converter for CsvHelper
public class CustomBooleanConverter : DefaultTypeConverter
{
    public override object ConvertFromString(string text, IReaderRow row, MemberMapData memberMapData)
    {
        // Convert "Yes" to true and anything else to false
        return text.Equals("Yes", StringComparison.OrdinalIgnoreCase);
    }
}
// Custom Boolean Converter for CsvHelper
public class CustomBooleanConverter : DefaultTypeConverter
{
    public override object ConvertFromString(string text, IReaderRow row, MemberMapData memberMapData)
    {
        // Convert "Yes" to true and anything else to false
        return text.Equals("Yes", StringComparison.OrdinalIgnoreCase);
    }
}
' Custom Boolean Converter for CsvHelper
Public Class CustomBooleanConverter
	Inherits DefaultTypeConverter

	Public Overrides Function ConvertFromString(ByVal text As String, ByVal row As IReaderRow, ByVal memberMapData As MemberMapData) As Object
		' Convert "Yes" to true and anything else to false
		Return text.Equals("Yes", StringComparison.OrdinalIgnoreCase)
	End Function
End Class
$vbLabelText   $csharpLabel

Aunque bool es un tipo estándar de .NET, el convertidor por defecto solo puede manejar valores True/False, mientras que nuestro archivo CSV tiene Yes/No. Aquí, necesitamos subclasificar el DefaultTypeConverter, luego sobrescribir el método ConvertFromString.

6. Licencias

IronXL is an openly commercial C# Excel library. Es gratis para desarrollo y siempre se puede obtener una licencia para despliegue comercial. Licenses are available for single-project use, single developers, agencies, and global corporations, as well as SaaS and OEM redistribution. Todas las licencias incluyen una garantía de devolución de dinero de 30 días, un año de soporte al producto y actualizaciones, validez para dev/staging/producción, y también una licencia permanente (compra única). El paquete Lite comienza desde $799.

CsvHelper — leer y escribir archivos CSV es completamente gratis para uso comercial.

7. Resumen y conclusión

Resumen

IronXL es una biblioteca completa que ofrece todo lo que necesitas para poder manipular un archivo de Excel. Es fácil de usar y te proporciona la facilidad 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 solo puede manejar archivos CSV. Todos los ejemplos de código se pueden encontrar en los archivos de documentación de CsvHelper. La documentación te brinda pautas sobre cómo usar CsvHelper en tu proyecto.

Conclusión

IronXL tiene una clara ventaja sobre CsvHelper, ya que soporta a los usuarios que trabajan con múltiples formatos. Además, puedes aplicar fórmulas y estilos según tu elección, mientras que CsvHelper solo permite la lectura y escritura de archivos CSV con opciones limitadas. Tampoco puedes agregar nuevos registros a un archivo CSV existente, ya que simplemente sobrescribe las entradas anteriores.

Por favor notaCsvHelper es una marca registrada de su respectivo propietario. Este sitio no está afiliado, aprobado, o patrocinado por CsvHelper. Todos los nombres de producto, logotipos y marcas son propiedad de sus respectivos dueños. Las comparaciones son sólo para fines informativos y reflejan información disponible públicamente al momento de escribir.

Preguntas Frecuentes

¿Cómo puedo convertir archivos de Excel a diferentes formatos usando C#?

Usando IronXL, puedes convertir archivos de Excel a varios formatos como XLS, XLSX, CSV y TSV. Esto se puede hacer cargando el archivo con IronXL y guardándolo en el formato deseado utilizando sus versátiles opciones de exportación.

¿Cuáles son los beneficios de usar IronXL sobre CsvHelper para la manipulación de archivos de Excel?

IronXL ofrece una funcionalidad integral para trabajar con múltiples formatos de Excel, incluyendo XLS, XLSX y CSV. Soporta características como manipulación de datos, estilo y aplicación de fórmulas, lo que lo hace ideal para proyectos que requieren un manejo extenso de archivos de Excel. En contraste, CsvHelper está diseñado específicamente para operaciones rápidas y eficientes de archivos CSV.

¿Cómo instalo IronXL para un proyecto en C#?

Puedes instalar IronXL a través del Administrador de paquetes NuGet en Visual Studio buscando 'IronXL'. Alternativamente, puedes descargar el paquete NuGet directamente o instalarlo manualmente referenciando el DLL en tu proyecto.

¿Puede utilizarse IronXL sin tener Microsoft Excel instalado?

Sí, IronXL no requiere que Microsoft Excel esté instalado en tu sistema. Funciona de manera independiente para leer, editar y crear archivos de Excel en varios formatos.

¿Cómo leo y escribo archivos CSV usando CsvHelper?

CsvHelper te permite definir una clase para mapear registros CSV, configurar los ajustes de CsvHelper y usar el CsvReader y CsvWriter para manejar operaciones de archivos CSV fácilmente.

¿Qué hace que CsvHelper sea una elección popular para manejar archivos CSV?

CsvHelper es conocido por su velocidad, flexibilidad y facilidad de uso. Soporta objetos de clase personalizados y conversiones de tipos, lo que lo convierte en una elección preferida para proyectos enfocados únicamente en el procesamiento de datos CSV.

¿Existe un requisito de licencia para usar IronXL?

Sí, desplegar IronXL en un entorno comercial requiere una licencia de pago. Esto contrasta con CsvHelper, que es gratuito para uso comercial.

¿Qué tipos de proyectos se beneficiarían más de IronXL?

Proyectos que requieren una manipulación extensa de diversos formatos de archivos de Excel, incluyendo características como estilo, ordenamiento de datos y cálculos de fórmulas, se beneficiarían más de usar IronXL debido a su conjunto de características robustas.

Jordi Bardia
Ingeniero de Software
Jordi es más competente en Python, C# y C++. Cuando no está aprovechando sus habilidades en Iron Software, está programando juegos. Compartiendo responsabilidades para pruebas de productos, desarrollo de productos e investigación, Jordi agrega un valor inmenso a la mejora continua del producto. La experiencia variada lo mantiene ...
Leer más