Saltar al pie de página
COMPARAR CON OTROS COMPONENTES

Una comparación entre IronXL y CsvWriter

Trabajar con archivos CSV puede ser una tarea desafiante. Sin embargo, hoy en día hay muchas bibliotecas disponibles para ayudar a los desarrolladores con esta tarea, y 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 el formato estándar de Excel, utilizando dos de las bibliotecas más populares, IronXL y CSVWriter.

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 tener Microsoft Excel instalado, ni depende de Interop.

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 ultra rápido. IronXL es compatible con .NET Core, .NET Framework, Xamarin, Mobile, Linux, macOS y Azure.

IronXL es una biblioteca Excel destacada para C# en .NET Core y .NET Framework.

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 de hoja de trabajo fácil de usar ["A1:B10"]. Combina y crea rangos de manera intuitiva.
  • Ordenar — ordenar rangos, columnas y filas.
  • Estilos: estilos visuales de celda, fuente, tamaño, patrón de fondo, borde, alineación y formatos de número.

CSVWriter

Una biblioteca .NET para escribir archivos CSV. Extremadamente rápida, flexible y fácil de usar. Compatible con escritura de objetos de clase personalizados.

Características de CsvWriter

  • 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", seleccionaC#en la lista desplegable del idioma,Windowsde la lista dePlataformasyConsolade la lista de "Tipos de proyecto".
  • SeleccionaAplicació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 enSiguiente.
  • En la pantalla deInformación adicional, especifica laVersión de Frameworkque deseas utilizar. Usaremos.NET Framework 4.8en este ejemplo.
Csvhelper Alternatives 2 related to 1. Crear una aplicación de consola

Crear proyecto - .NET Framework

  • Haz clic enCrearpara 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 manera de descargar e instalar la biblioteca C# de IronXL es utilizar los siguientes pasos para instalar elpaquete NuGet IronXLa través del Símbolo del sistema del desarrollador.

  • Abre el Símbolo del sistema del desarrollador, normalmente se encuentra en la carpeta de Visual Studio.
  • Escribe el siguiente comando:
    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. Agrega las siguientes directivas using 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 CSVWriter

3.1. Uso de la consola del administrador de paquetes NuGet

Para trabajar con CSVWriter necesitas descargar e instalar la biblioteca C# CsvHelper. Para hacerlo, utiliza los siguientes pasos para instalar elpaquete NuGeta través del Símbolo del sistema del desarrollador.

  • Abre el Símbolo del sistema del desarrollador, normalmente se encuentra en la carpeta de Visual Studio.
  • Escribe el siguiente comando:
    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
  • Revisa el detalle del método CsvHelper.CsvWriter para la implementación

3.2. Descarga directa

Download from the NuGet website: 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, pero IronXL proporciona una opción bastante buena y fácil para lograrlo, y sin utilizar 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 specify the format and delimiter
WorkBook workbook = WorkBook.LoadCSV("test.csv", fileFormat: ExcelFileFormat.XLSX, ListDelimiter: ",");
// Get the default worksheet
WorkSheet ws = workbook.DefaultWorkSheet;

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

// Save the workbook as an Excel file
workbook.SaveAs("CsvToExcelConversion.xlsx");
' Load the CSV file and specify the format and delimiter
Dim workbook As WorkBook = WorkBook.LoadCSV("test.csv", fileFormat:= ExcelFileFormat.XLSX, ListDelimiter:= ",")
' Get 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 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 de trabajo y la hoja de trabajo, se puede utilizar el siguiente ejemplo de código para realizar cambios en las fórmulas o aplicar fórmulas 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 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 el formato CSV usando el método SaveAsCsv.

// Load the workbook
WorkBook wb = WorkBook.Load("Normal_Excel_File.xlsx");
// Save as .csv file
wb.SaveAsCsv("SaveAsCSV.csv", ",");
// Saved as : SaveAsCSV.Sheet1.csv
// Load the workbook
WorkBook wb = WorkBook.Load("Normal_Excel_File.xlsx");
// Save as .csv file
wb.SaveAsCsv("SaveAsCSV.csv", ",");
// Saved as : SaveAsCSV.Sheet1.csv
' Load the workbook
Dim wb As WorkBook = WorkBook.Load("Normal_Excel_File.xlsx")
' Save as .csv file
wb.SaveAsCsv("SaveAsCSV.csv", ",")
' Saved as : SaveAsCSV.Sheet1.csv
$vbLabelText   $csharpLabel

5. Trabajar con datos CSV mediante CSVWriter

Escribir datos en un archivo CSV es una operación común. El método CSVWriter de CSVHelper con un separador suministrado maneja todos los caracteres y caracteres de nueva línea en un escritor CSV muy simple publicado para C#. Aquí vamos a ver cómo escribir datos usando CSVWriter.

5.1. Crear una aplicación de consola sencilla

Crea una aplicación de consola simple de CSVWriter con separador suministrado usando Visual Studio. Una vez creado el proyecto, el siguiente paso es crear una clase Person:

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

Dentro del método Main, ahora hagamos una lista de objetos Person que escribiremos en el archivo 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"
	}
}
$vbLabelText   $csharpLabel

5.2. Escribir en un archivo CSV en C# con la configuración predeterminada

CsvHelper ha surgido como la forma estándar de escribir CSV en C# usando 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
$vbLabelText   $csharpLabel

5.3. Añadir datos

Debemos tener en cuenta el hecho de que cada vez que ejecutamos nuestro programa, los archivos CSV antiguos se sobrescribirán. A veces queremos que los datos se anexen 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 lograr esto utilizando un FileStream, y luego construyendo nuestro StreamWriter utilizando ese FileStream. Aunque esto no entra dentro del alcance 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
$vbLabelText   $csharpLabel

Anexar a un archivo existente es complicado, sin embargo, porque el orden puede cambiar cuando anexamos, o podemos haber agregado nuevas propiedades. Debemos asegurarnos de tener esto en cuenta al anexar.

6. Licencias

IronXL is an openly commercial C# Excel library. It is free for development and can always be licensed for commercial deployment.Licenses are availablefor 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.

CSVWriter con separador suministrado es un elemento separado por comas completamente gratuito para uso comercial amistoso.

7. Resumen y conclusión

Resumen

IronXL es una biblioteca completa que ofrece todo lo que necesitas para poder manipular un archivo de Excel. Te proporciona la facilidad 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 para manipular otros formatos de archivo con facilidad.

Por otro lado, CSVWriter solo funciona con formatos de archivo CSV y con opciones muy limitadas. Los usuarios no pueden cambiar entre diferentes formatos de archivo, mientras que con IronXL sí pueden. Todos los ejemplos de código se pueden encontrar en los archivos de documentación de CsvHelper. Este documento proporciona pautas sobre cómo usar CSVWriter en tu proyecto.

Conclusión

IronXL tiene una clara ventaja sobre CsvHelper.CSVWriter, ya que soporta trabajar 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, y con opciones limitadas. Además, no puedes anexar nuevos registros a un archivo CSV existente, ya que simplemente sobrescribe las entradas anteriores.

Preguntas Frecuentes

¿Cuáles son las alternativas a CSVWriter para manejar documentos de Excel en C#?

IronXL es una excelente alternativa a CSVWriter para manejar documentos de Excel en C#. Te permite leer, editar y exportar varios formatos de Excel como XLS, XLSX, CSV y TSV sin requerir Microsoft Excel.

¿Cómo puedo convertir un archivo CSV a un formato de Excel usando una biblioteca .NET?

Usando IronXL, puedes convertir fácilmente un archivo CSV a un formato de Excel cargando el CSV en un libro de trabajo y luego guardándolo como un archivo XLSX. Este proceso implica comandos de código simples para manipular y guardar los archivos.

¿Qué ventajas ofrece IronXL sobre CSVWriter?

IronXL ofrece varias ventajas sobre CSVWriter, incluyendo soporte para múltiples formatos de archivo, la habilidad de aplicar fórmulas de Excel y funcionalidades avanzadas como clasificación de datos y estilos. En contraste, CSVWriter está limitado a manejar archivos CSV.

¿Cómo instalo IronXL en mi proyecto C#?

Puedes instalar IronXL en tu proyecto C# a través del Administrador de paquetes NuGet en Visual Studio. Alternativamente, puedes descargar el paquete NuGet o instalar manualmente el DLL mediante el Símbolo del sistema del desarrollador.

¿Puede usarse IronXL en entornos .NET Core y Azure?

Sí, IronXL soporta múltiples plataformas, incluyendo .NET Core y Azure, lo que lo convierte en una opción versátil para desarrollar aplicaciones que requieren manipulación de archivos de Excel en diferentes entornos.

¿Es posible escribir objetos de clase personalizados en un archivo CSV usando CSVWriter?

Sí, CSVWriter soporta escribir objetos de clase personalizados en un archivo CSV. Proporciona un enfoque flexible y fácil de usar para escribir datos eficientemente al trabajar con archivos CSV.

¿Cuáles son los requisitos de licencia para usar IronXL en aplicaciones comerciales?

IronXL requiere una licencia para uso comercial. Es gratuito para propósitos de desarrollo, pero hay diferentes licencias disponibles según las necesidades de implementación, ya sea para proyectos singulares o aplicaciones a nivel empresarial.

¿Cómo maneja IronXL las fórmulas de Excel?

IronXL te permite aplicar y manipular fórmulas de Excel dentro de tus hojas de cálculo, proporcionando una funcionalidad robusta para el cálculo y análisis dinámico de datos directamente dentro de tus aplicaciones C#.

¿Cuáles son algunos problemas comunes de resolución de errores al usar IronXL?

Los problemas comunes de resolución de errores con IronXL pueden incluir compatibilidad de formato de archivos, desajustes de tipos de datos o errores de instalación. Asegurarse de que las referencias de tu proyecto estén correctamente configuradas y verificar los formatos de datos puede ayudar a resolver estos problemas.

¿Puede IronXL agregar datos a un archivo de Excel existente?

Sí, IronXL puede agregar datos a un archivo de Excel existente. Te permite abrir un libro de trabajo existente, modificarlo añadiendo nuevos datos y luego guardar los cambios sin sobrescribir el contenido existente.

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