Saltar al pie de página
USANDO IRONXL

Cómo importar, leer y manipular datos de Excel en C#

Muchos desarrolladores de C# enfrentan un desafío común al intentar leer archivos de hojas de Excel: su fiel StreamReader, que funciona perfectamente para archivos de texto, falla misteriosamente con documentos de Excel. Si has intentado leer un archivo Excel usando StreamReader en C# solo para ver caracteres distorsionados o excepciones, no estás solo. Este tutorial explica por qué StreamReader no puede manejar archivos de Excel directamente y demuestra la solución adecuada usando IronXL sin Excel Interop.

La confusión a menudo surge porque los archivos CSV, que Excel puede abrir, funcionan bien con StreamReader. Sin embargo, los verdaderos archivos de Excel (XLSX, XLS) requieren un enfoque fundamentalmente diferente. Entender esta distinción te ahorrará horas de depuración y te llevará a la herramienta adecuada para el trabajo.

Cómo importar, leer y manipular datos de Excel en C#: Imagen 1 - IronXL

¿Por qué StreamReader no puede leer archivos de Excel?

StreamReader está diseñado para archivos de texto plano, leyendo datos de caracteres línea por línea utilizando una codificación específica. Los archivos de Excel, a pesar de su apariencia de hoja de cálculo, son en realidad estructuras complejas binarias o XML comprimidas en ZIP que StreamReader no puede interpretar.

static void Main(string[] args)
{
 // This code will NOT work - demonstrates the problem
 using (StreamReader reader = new StreamReader("ProductData.xlsx"))
 {
    string content = reader.ReadLine(); // read data
    Console.WriteLine(content); // Outputs garbled binary data
 }
}
static void Main(string[] args)
{
 // This code will NOT work - demonstrates the problem
 using (StreamReader reader = new StreamReader("ProductData.xlsx"))
 {
    string content = reader.ReadLine(); // read data
    Console.WriteLine(content); // Outputs garbled binary data
 }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Cuando ejecutas este fragmento de código de la clase Program, en lugar de ver tus datos de la hoja de cálculo, te encontrarás con datos binarios desconocidos, como "PK♥♦" o caracteres similares del sistema. Esto sucede porque los archivos XLSX son archivos ZIP que contienen múltiples archivos XML, mientras que los archivos XLS utilizan un formato binario propietario. StreamReader espera texto plano e intenta interpretar estas estructuras complejas como caracteres, resultando en una salida sin sentido.

Entrada de muestra

Cómo importar, leer y manipular datos de Excel en C#: Imagen 2 - Entrada de Excel

Resultado

Cómo importar, leer y manipular datos de Excel en C#: Imagen 3 - Salida de consola

Los archivos modernos de Excel (XLSX) contienen múltiples componentes: hojas de trabajo, estilos, cadenas compartidas y relaciones, todos empaquetados juntos. Esta complejidad requiere bibliotecas especializadas que entiendan la estructura del archivo Excel, lo que nos lleva a IronXL.

¿Cómo leer archivos de Excel con IronXL?

IronXL proporciona una solución sencilla para leer archivos de Excel en C#. A diferencia de StreamReader, IronXL entiende la estructura interna de Excel y proporciona métodos intuitivos para acceder a tus datos. La biblioteca es compatible con Windows, Linux, macOS y contenedores Docker, lo que la hace ideal para aplicaciones modernas multiplataforma.

Cómo importar, leer y manipular datos de Excel en C#: Imagen 4 - Multiplataforma

Primero, instala IronXL a través del Administrador de Paquetes NuGet:

Install-Package IronXL.Excel

Cómo importar, leer y manipular datos de Excel en C#: Figura 5 - Instalación

Aquí tienes cómo leer un archivo de Excel correctamente:

using IronXL;
// Load the Excel file
WorkBook workbook = WorkBook.Load("sample.xlsx");
WorkSheet worksheet = workbook.DefaultWorkSheet;
// Read specific cell values
string cellValue = worksheet["A1"].StringValue;
Console.WriteLine($"Cell A1 contains: {cellValue}");
// Read a range of cells
foreach (var cell in worksheet["A1:C5"])
{
    Console.WriteLine($"{cell.AddressString}: {cell.Text}");
}
using IronXL;
// Load the Excel file
WorkBook workbook = WorkBook.Load("sample.xlsx");
WorkSheet worksheet = workbook.DefaultWorkSheet;
// Read specific cell values
string cellValue = worksheet["A1"].StringValue;
Console.WriteLine($"Cell A1 contains: {cellValue}");
// Read a range of cells
foreach (var cell in worksheet["A1:C5"])
{
    Console.WriteLine($"{cell.AddressString}: {cell.Text}");
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Este código carga con éxito tu archivo de Excel y proporciona acceso limpio a los valores de las celdas. El método WorkBook.Load detecta automáticamente el formato de archivo (XLSX, XLS, XLSM, CSV) y maneja todo el análisis complejo internamente. Puedes acceder a las celdas usando la notación familiar de Excel como "A1" o rangos como "A1:C5", haciendo que el código sea intuitivo para cualquiera familiarizado con Excel.

¿Cómo leer Excel desde flujos de memoria?

Las aplicaciones del mundo real a menudo necesitan procesar archivos de Excel desde flujos en lugar de archivos de disco. Los escenarios comunes incluyen manejar cargas web, recuperar archivos de bases de datos o procesar datos desde almacenamiento en la nube. IronXL maneja estas situaciones elegantemente:

using IronXL;
using System.IO;
// Read Excel from a memory stream
byte[] fileBytes = File.ReadAllBytes("ProductData.xlsx");
using (MemoryStream stream = new MemoryStream(fileBytes))
{
    WorkBook workbook = WorkBook.FromStream(stream);
    WorkSheet worksheet = workbook.DefaultWorkSheet;
    // Process the data
    int rowCount = worksheet.RowCount;
    Console.WriteLine($"The worksheet has {rowCount} rows");
    // Read all data into a new DataTable, return dt
    var dataTable = worksheet.ToDataTable(false);
    // Return DataTable row count 
    Console.WriteLine($"Loaded {dataTable.Rows.Count} data rows");
}
using IronXL;
using System.IO;
// Read Excel from a memory stream
byte[] fileBytes = File.ReadAllBytes("ProductData.xlsx");
using (MemoryStream stream = new MemoryStream(fileBytes))
{
    WorkBook workbook = WorkBook.FromStream(stream);
    WorkSheet worksheet = workbook.DefaultWorkSheet;
    // Process the data
    int rowCount = worksheet.RowCount;
    Console.WriteLine($"The worksheet has {rowCount} rows");
    // Read all data into a new DataTable, return dt
    var dataTable = worksheet.ToDataTable(false);
    // Return DataTable row count 
    Console.WriteLine($"Loaded {dataTable.Rows.Count} data rows");
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

El método WorkBook.FromStream acepta cualquier tipo de flujo, ya sea un MemoryStream, FileStream, o flujo de red. Esta flexibilidad te permite procesar archivos de Excel desde varias fuentes sin guardarlos primero en el disco. El ejemplo también demuestra convertir datos de hojas de trabajo a un DataTable, lo cual se integra perfectamente con bases de datos y escenarios de vinculación de datos.

Resultado

Cómo importar, leer y manipular datos de Excel en C#: Figura 6 - Leer Excel desde salida de MemoryStream

¿Cuándo utilizar el objeto remitente para leer datos?

En casos donde este código se utiliza dentro de programación orientada a eventos (por ejemplo, manejando un botón de carga de archivos en Windows Forms o ASP.NET), la firma del método a menudo incluye parámetros como object sender y EventArgs e. Este contexto asegura que la lógica de procesamiento de Excel se vincule correctamente a eventos de UI o servicios.

Cómo importar, leer y manipular datos de Excel en C#: Figura 7 - Características

¿Cómo convertir entre Excel y CSV?

Mientras que StreamReader puede manejar archivos CSV, a menudo necesitas convertir entre formatos de Excel y CSV. IronXL hace que esta conversión sea sencilla:

using IronXL;
// Load an Excel file and save as CSV
WorkBook workbook = WorkBook.Load("data.xlsx");
workbook.SaveAsCsv("output.csv");
// Load a CSV file and save as Excel
WorkBook csvWorkbook = WorkBook.LoadCSV("input.csv");
csvWorkbook.SaveAs("output.xlsx");
// Export specific worksheet to CSV
WorkSheet worksheet = workbook.WorkSheets[0];
worksheet.SaveAsCsv("worksheet1.csv");
using IronXL;
// Load an Excel file and save as CSV
WorkBook workbook = WorkBook.Load("data.xlsx");
workbook.SaveAsCsv("output.csv");
// Load a CSV file and save as Excel
WorkBook csvWorkbook = WorkBook.LoadCSV("input.csv");
csvWorkbook.SaveAs("output.xlsx");
// Export specific worksheet to CSV
WorkSheet worksheet = workbook.WorkSheets[0];
worksheet.SaveAsCsv("worksheet1.csv");
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Estas conversiones preservan tus datos mientras cambian el formato de archivo. Al convertir Excel a CSV, IronXL aplana la primera hoja de trabajo por defecto, pero puedes especificar qué hoja de trabajo exportar. Convertir de CSV a Excel crea una hoja de cálculo correctamente formateada que preserva los tipos de datos y permite futuras adiciones de formato y fórmulas.

Conclusión

La incapacidad de StreamReader para procesar archivos de Excel se debe a la diferencia fundamental entre el texto plano y la estructura compleja del archivo de Excel. Aunque StreamReader funciona perfectamente para CSV y otros formatos de texto, los verdaderos archivos de Excel requieren una biblioteca especializada como IronXL que entienda las estructuras binarias y XML dentro de ellos.

IronXL proporciona una solución elegante con su API intuitiva, soporte completo de formatos y capacidades de procesamiento de flujos sin problemas. Ya sea que estés construyendo aplicaciones web, software de escritorio o servicios en la nube, IronXL maneja los archivos de Excel de manera confiable en todas las plataformas.

Cómo importar, leer y manipular datos de Excel en C#: Figura 8 - Licencias

¿Listo para empezar a trabajar con archivos de Excel correctamente? Descarga la prueba gratuita de IronXL que mejor se adapte a las necesidades de tu proyecto.

Preguntas Frecuentes

¿Por qué StreamReader no puede manejar archivos de Excel directamente en C#?

StreamReader está diseñado para archivos de texto y no admite el formato binario de los archivos de Excel, por lo que puedes encontrar caracteres distorsionados o excepciones al usarlo para leer documentos Excel. En su lugar, se recomienda usar una biblioteca como IronXL para el manejo adecuado de archivos de Excel.

¿Cuál es la forma recomendada de importar datos de Excel en C#?

La forma recomendada de importar datos de Excel en C# es usando IronXL. Permite a los desarrolladores leer y manipular archivos de Excel sin la necesidad de Excel Interop, proporcionando una solución más sencilla y eficiente.

¿Puedo manipular archivos de Excel en C# sin usar Excel Interop?

Sí, puedes manipular archivos de Excel en C# sin Excel Interop usando IronXL. Proporciona una forma fluida de trabajar con documentos Excel directamente en tu aplicación C#.

¿Cuáles son los beneficios de usar IronXL para el manejo de archivos de Excel?

IronXL ofrece varios beneficios, incluida la capacidad de leer y escribir archivos de Excel sin la necesidad de Microsoft Excel, soporte para varios formatos de Excel y una potente API que simplifica las tareas de manipulación de datos.

¿IronXL admite la lectura de archivos de Excel con tipos de datos complejos?

Sí, IronXL admite la lectura de archivos de Excel con tipos de datos complejos, lo que te permite manejar estructuras de datos diversas de manera eficiente dentro de tus aplicaciones C#.

¿Cómo mejora IronXL el proceso de trabajo con archivos de Excel en C#?

IronXL agiliza el proceso de trabajo con archivos de Excel proporcionando una interfaz fácil de usar que elimina la necesidad de Excel Interop, reduce la complejidad del código y mejora el rendimiento.

¿Es posible leer y escribir archivos de Excel en diferentes formatos usando IronXL?

Sí, IronXL admite múltiples formatos de archivo de Excel como XLSX, XLS, CSV y más, permitiéndote leer y escribir archivos en varios formatos sin esfuerzo.

¿Puede IronXL manejar grandes archivos de Excel de manera eficiente?

IronXL está diseñado para manejar archivos de Excel grandes de manera eficiente, proporcionando un rendimiento robusto y minimizando el uso de memoria durante las operaciones de archivo.

¿Qué hace que IronXL sea una opción adecuada para los desarrolladores de C# que trabajan con archivos de Excel?

IronXL es una opción adecuada para los desarrolladores de C# porque ofrece un conjunto completo de características para leer, escribir y manipular archivos de Excel con facilidad, sin requerir Microsoft Excel o dependencias de interoplación complejas.

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