Saltar al pie de página
USANDO IRONXL

Cómo leer archivos de Excel en C# usando IronXL

Leer archivos de Excel en aplicaciones C# es un requisito recurrente para el software empresarial, las canalizaciones de procesamiento de datos y los sistemas de informes. Los enfoques tradicionales que utilizan Microsoft Office Interop requieren Excel instalado en cada servidor o estación de trabajo, creando dependencias frágiles que complican el despliegue y las licencias. IronXL elimina esa dependencia por completo: su aplicación lee formatos de hojas de cálculo XLSX, XLS, CSV y otros sin Office instalado en ningún lugar del entorno.

Este tutorial le guía a través de cada técnica que necesita: instalar la biblioteca, cargar libros de trabajo, extraer valores de celdas tipeadas, iterar sobre filas y columnas, realizar cálculos agregados y construir un lector de datos de empleados completo. Todos los ejemplos utilizan C# con declaraciones de nivel superior dirigidas a .NET 10.


¿Cómo se instala IronXL para el procesamiento de Excel?

Abra la Consola del Administrador de Paquetes NuGet en Visual Studio y ejecute el siguiente comando para agregar IronXL a su proyecto. Alternativamente, si prefiere trabajar desde una terminal, use el comando .NET CLI mostrado en la segunda línea:

Install-Package IronXl.Excel
dotnet add package IronXl.Excel
Install-Package IronXl.Excel
dotnet add package IronXl.Excel
SHELL

El paquete se instala en segundos y agrega una referencia a un ensamblado gestionado único a su proyecto. No hay registro COM, ni Ensamblados Primarios de Interop de Office, ni depende de versiones específicas de Excel para gestionar.

Después de la instalación, agregue la directiva using en la parte superior de cada archivo que funcione con datos de hojas de cálculo:

using IronXL;
using IronXL;
$vbLabelText   $csharpLabel

Ese único espacio de nombres le da acceso a WorkBook, WorkSheet, rangos de celdas, propiedades de valor tipeadas, funciones agregadas y todos los demás tipos de IronXL. La página de la Galería NuGet para IronXl.Excel lista cada versión disponible y su árbol completo de dependencias.


¿Qué formatos de archivo de Excel soporta IronXL?

Comprender los formatos que su aplicación debe manejar influye en las llamadas a la API que realiza y en las decisiones de almacenamiento que adopta su proyecto.

XLSX, el formato predeterminado desde Excel 2007, es un archivo ZIP de archivos XML. Soporta más de un millón de filas, formato enriquecido, tablas dinámicas y rangos nombrados. La mayoría de las canalizaciones de datos modernas producen salida XLSX, por lo que este es el formato que encuentra con más frecuencia.

XLS es el formato binario heredado usado por Excel 2003 y versiones anteriores. Algunos sistemas empresariales todavía exportan XLS, por lo que un soporte confiable para este formato es importante al integrarse con infraestructuras más antiguas. IronXL lee archivos XLS sin ninguna configuración especial por su parte.

XLSM amplía XLSX con soporte para macros. IronXL lee los datos de la hoja de cálculo de los archivos XLSM incluso si no ejecuta el código VBA incrustado, que es el comportamiento correcto para la extracción de datos del lado del servidor.

CSV y TSV son formatos tabulares de texto plano ampliamente utilizados para el intercambio de datos entre sistemas. WorkBook.LoadCSV maneja archivos separados por comas, e IronXL devuelve el mismo objeto WorkBook que su código ya sabe cómo navegar, manteniendo su lógica de lectura de datos uniforme independientemente del formato de origen.

IronXL detecta el formato de archivo automáticamente a partir de la extensión del archivo cuando se llama a WorkBook.Load. No es necesario especificar el formato explícitamente en la mayoría de los casos, lo que simplifica el código que debe manejar entradas que llegan desde múltiples fuentes.

Formatoos de archivo de Excel soportados por IronXL
Formato Extensión Método Load Notas
Libro de Trabajo Open XML .xlsx WorkBook.Load Formatoo moderno predeterminado
Binario heredado .xls WorkBook.Load Excel 2003 y versiones anteriores
Compatible con macos .xlsm WorkBook.Load Solo lecturas; macros no ejecutadas
Separado por comas .csv WorkBook.LoadCSV Analizador CSV optimizado
Separado por tabulaciones .tsv WorkBook.Load Variante delimitada por tabulaciones

¿Cómo cargar y leer un libro de Excel?

El método WorkBook.Load es el punto de entrada para todas las operaciones basadas en archivos. Pase la ruta del archivo y IronXL devuelve un objeto de libro de trabajo completamente poblado que puede consultar inmediatamente:

using IronXL;

// Load the workbook; format is detected automatically
WorkBook workbook = WorkBook.Load("Employees.xlsx");

// Access the first worksheet
WorkSheet sheet = workbook.DefaultWorkSheet;

// Read a single cell by A1 address
string companyName = sheet["A1"].StringValue;
Console.WriteLine($"Company: {companyName}");

// Access sheets by name or by zero-based index
WorkSheet byName  = workbook.GetWorkSheet("Sales");
WorkSheet byIndex = workbook.WorkSheets[1];

// Load a password-protected file
WorkBook secured = WorkBook.Load("Confidential.xlsx", "p@ssw0rd");
using IronXL;

// Load the workbook; format is detected automatically
WorkBook workbook = WorkBook.Load("Employees.xlsx");

// Access the first worksheet
WorkSheet sheet = workbook.DefaultWorkSheet;

// Read a single cell by A1 address
string companyName = sheet["A1"].StringValue;
Console.WriteLine($"Company: {companyName}");

// Access sheets by name or by zero-based index
WorkSheet byName  = workbook.GetWorkSheet("Sales");
WorkSheet byIndex = workbook.WorkSheets[1];

// Load a password-protected file
WorkBook secured = WorkBook.Load("Confidential.xlsx", "p@ssw0rd");
$vbLabelText   $csharpLabel

La propiedad DefaultWorkSheet devuelve la primera hoja, cubriendo la mayoría de los archivos de una sola hoja. Cuando su archivo contiene múltiples hojas, GetWorkSheet recupera por nombre y WorkSheets[n] recupera por índice basado en cero. La referencia de la API de WorkBook documenta cada sobrecarga y propiedad del objeto de libro de trabajo.

Lectura de archivos Excel en VB.NET usando IronXL: Una guía paso a paso sin Microsoft Office: Imagen 1 - Instalación

Entrada

Lectura de archivos Excel en VB.NET usando IronXL: Una guía paso a paso sin Microsoft Office: Imagen 2 - Entrada de Excel de muestra

Resultado

Lectura de archivos Excel en VB.NET usando IronXL: Una guía paso a paso sin Microsoft Office: Imagen 3 - Salida de consola


¿Cómo se leen valores de celdas de tipo específico desde Excel?

Cada celda en IronXL expone propiedades de tipo que devuelven valores en el tipo de datos exacto que necesita, sin necesidad de análisis o conversión manual. Las propiedades de tipo manejan la coerción desde la representación subyacente de la celda automáticamente:

using IronXL;

WorkBook workbook = WorkBook.Load("Employees.xlsx");
WorkSheet sheet   = workbook.DefaultWorkSheet;

// Extract typed values from row 2
int      employeeId = sheet["A2"].IntValue;
string   name       = sheet["B2"].StringValue;
string   department = sheet["C2"].StringValue;
decimal  salary     = sheet["D2"].DecimalValue;
DateTime hireDate   = sheet["E2"].DateTimeValue;

Console.WriteLine($"ID:         {employeeId}");
Console.WriteLine($"Name:       {name}");
Console.WriteLine($"Department: {department}");
Console.WriteLine($"Salary:     {salary:C}");
Console.WriteLine($"Hired:      {hireDate:d}");

// Use the Text property for the formatted display value
string formattedSalary = sheet["D2"].Text;   // "$75,000.00"
string formattedDate   = sheet["E2"].Text;   // "28/02/2026"

// Guard against empty cells before reading
if (!sheet["B3"].IsEmpty)
{
    string value = sheet["B3"].StringValue;
}
using IronXL;

WorkBook workbook = WorkBook.Load("Employees.xlsx");
WorkSheet sheet   = workbook.DefaultWorkSheet;

// Extract typed values from row 2
int      employeeId = sheet["A2"].IntValue;
string   name       = sheet["B2"].StringValue;
string   department = sheet["C2"].StringValue;
decimal  salary     = sheet["D2"].DecimalValue;
DateTime hireDate   = sheet["E2"].DateTimeValue;

Console.WriteLine($"ID:         {employeeId}");
Console.WriteLine($"Name:       {name}");
Console.WriteLine($"Department: {department}");
Console.WriteLine($"Salary:     {salary:C}");
Console.WriteLine($"Hired:      {hireDate:d}");

// Use the Text property for the formatted display value
string formattedSalary = sheet["D2"].Text;   // "$75,000.00"
string formattedDate   = sheet["E2"].Text;   // "28/02/2026"

// Guard against empty cells before reading
if (!sheet["B3"].IsEmpty)
{
    string value = sheet["B3"].StringValue;
}
$vbLabelText   $csharpLabel

La propiedad Text devuelve el valor de visualización exactamente como está formateado en Excel: útil cuando necesita la cadena de número formateado en lugar del número bruto. Para celdas que contienen fórmulas de Excel, IronXL evalúa la expresión y devuelve el resultado calculado a través de las mismas propiedades de tipo. Propiedades de valor adicionales -- BoolValue, DoubleValue, FloatValue -- aparecen en la referencia de valor de celda.


¿Cómo se iteran filas y columnas de Excel?

Procesar cada registro en un conjunto de datos requiere iterar a través de filas y columnas. La sintaxis de rango de IronXL se mapea directamente en la notación A1 de Excel, por lo que seleccionar un bloque de celdas es familiar para cualquiera que haya escrito fórmulas de hoja de cálculo:

using IronXL;

WorkBook workbook = WorkBook.Load("Employees.xlsx");
WorkSheet sheet   = workbook.DefaultWorkSheet;

// Iterate a single column range
Console.WriteLine("Employee List:");
foreach (var cell in sheet["B2:B100"])
{
    if (!string.IsNullOrEmpty(cell.Text))
        Console.WriteLine($"  - {cell.Text}");
}

// Iterate all rows and all columns using the Rows property
foreach (var row in sheet.Rows)
{
    foreach (var cell in row)
        Console.Write(cell.Text.PadRight(15));
    Console.WriteLine();
}
using IronXL;

WorkBook workbook = WorkBook.Load("Employees.xlsx");
WorkSheet sheet   = workbook.DefaultWorkSheet;

// Iterate a single column range
Console.WriteLine("Employee List:");
foreach (var cell in sheet["B2:B100"])
{
    if (!string.IsNullOrEmpty(cell.Text))
        Console.WriteLine($"  - {cell.Text}");
}

// Iterate all rows and all columns using the Rows property
foreach (var row in sheet.Rows)
{
    foreach (var cell in row)
        Console.Write(cell.Text.PadRight(15));
    Console.WriteLine();
}
$vbLabelText   $csharpLabel

El rango sheet["B2:B100"] devuelve una colección enumerable de objetos de celda. Verificar string.IsNullOrEmpty omite filas en blanco graciosamente. La propiedad Rows, documentada en la guía de rango de datos de la hoja de trabajo, recorre la hoja una fila a la vez y expone las celdas de cada fila sin requerir que conozca la cantidad de columnas de antemano.

Resultado

Lectura de archivos Excel en VB.NET usando IronXL: Una guía paso a paso sin Microsoft Office: Imagen 4 - Salida de filas de Excel


¿Cómo se realizan cálculos agregados en datos de Excel?

IronXL incluye funciones agregadas integradas que calculan resultados directamente en rangos de celdas, sin necesidad de bucles de acumulación manual:

using IronXL;

WorkBook workbook = WorkBook.Load("Employees.xlsx");
WorkSheet sheet   = workbook.DefaultWorkSheet;

// Built-in aggregate methods work on any named range
decimal total   = sheet["D2:D200"].Sum();
decimal highest = sheet["D2:D200"].Max();
decimal lowest  = sheet["D2:D200"].Min();
decimal average = sheet["D2:D200"].Avg();

Console.WriteLine($"Total Payroll:  {total:C}");
Console.WriteLine($"Highest Salary: {highest:C}");
Console.WriteLine($"Lowest Salary:  {lowest:C}");
Console.WriteLine($"Average Salary: {average:C}");

// Combine with LINQ for filtered aggregation
decimal itTotal = sheet["D2:D200"]
    .Where(c => sheet[$"C{c.RowIndex}"].StringValue == "IT")
    .Sum(c => c.DecimalValue);
Console.WriteLine($"IT Department Total: {itTotal:C}");
using IronXL;

WorkBook workbook = WorkBook.Load("Employees.xlsx");
WorkSheet sheet   = workbook.DefaultWorkSheet;

// Built-in aggregate methods work on any named range
decimal total   = sheet["D2:D200"].Sum();
decimal highest = sheet["D2:D200"].Max();
decimal lowest  = sheet["D2:D200"].Min();
decimal average = sheet["D2:D200"].Avg();

Console.WriteLine($"Total Payroll:  {total:C}");
Console.WriteLine($"Highest Salary: {highest:C}");
Console.WriteLine($"Lowest Salary:  {lowest:C}");
Console.WriteLine($"Average Salary: {average:C}");

// Combine with LINQ for filtered aggregation
decimal itTotal = sheet["D2:D200"]
    .Where(c => sheet[$"C{c.RowIndex}"].StringValue == "IT")
    .Sum(c => c.DecimalValue);
Console.WriteLine($"IT Department Total: {itTotal:C}");
$vbLabelText   $csharpLabel

Sum, Min, Max, y Avg omiten automáticamente las celdas vacías y manejan la conversión numérica detrás de escena. Encadenar consultas LINQ en el rango le proporciona agregados filtrados: subtotales por departamento, sumas de rangos de fechas y conteos condicionales, todo sin salir de la API de IronXL.


¿Cómo se construye un lector completo de datos de empleados?

El siguiente ejemplo reúne todo lo cubierto hasta ahora en una aplicación de consola lista para producción que carga una hoja de cálculo de empleados, formatea cada registro, acumula los totales de salario, maneja la escritura, y captura errores de manera oportuna:

using IronXL;

try
{
    WorkBook workbook = WorkBook.Load("Employees.xlsx");
    WorkSheet sheet   = workbook.DefaultWorkSheet;

    Console.WriteLine("=== Employee Data Report ===\n");

    int     rowNumber     = 2;
    decimal totalSalary   = 0m;
    int     employeeCount = 0;

    while (!string.IsNullOrEmpty(sheet[$"A{rowNumber}"].StringValue))
    {
        int      id         = sheet[$"A{rowNumber}"].IntValue;
        string   name       = sheet[$"B{rowNumber}"].StringValue;
        string   department = sheet[$"C{rowNumber}"].StringValue;
        decimal  salary     = sheet[$"D{rowNumber}"].DecimalValue;

        Console.WriteLine($"{id,4}  {name,-20}  {department,-15}  {salary,10:C}");

        totalSalary   += salary;
        employeeCount += 1;
        rowNumber     += 1;
    }

    Console.WriteLine($"\nTotal Employees: {employeeCount}");
    Console.WriteLine($"Total Payroll:   {totalSalary:C}");

    // Write a new record back to the sheet and save
    sheet["A10"].Value = 1010;
    sheet["B10"].Value = "Jane Doe";
    sheet["C10"].Value = "Finance";
    sheet["D10"].Value = 75000;
    workbook.SaveAs("Employees-Updated.xlsx");
}
catch (Exception ex)
{
    Console.WriteLine($"Error reading Excel file: {ex.Message}");
}
using IronXL;

try
{
    WorkBook workbook = WorkBook.Load("Employees.xlsx");
    WorkSheet sheet   = workbook.DefaultWorkSheet;

    Console.WriteLine("=== Employee Data Report ===\n");

    int     rowNumber     = 2;
    decimal totalSalary   = 0m;
    int     employeeCount = 0;

    while (!string.IsNullOrEmpty(sheet[$"A{rowNumber}"].StringValue))
    {
        int      id         = sheet[$"A{rowNumber}"].IntValue;
        string   name       = sheet[$"B{rowNumber}"].StringValue;
        string   department = sheet[$"C{rowNumber}"].StringValue;
        decimal  salary     = sheet[$"D{rowNumber}"].DecimalValue;

        Console.WriteLine($"{id,4}  {name,-20}  {department,-15}  {salary,10:C}");

        totalSalary   += salary;
        employeeCount += 1;
        rowNumber     += 1;
    }

    Console.WriteLine($"\nTotal Employees: {employeeCount}");
    Console.WriteLine($"Total Payroll:   {totalSalary:C}");

    // Write a new record back to the sheet and save
    sheet["A10"].Value = 1010;
    sheet["B10"].Value = "Jane Doe";
    sheet["C10"].Value = "Finance";
    sheet["D10"].Value = 75000;
    workbook.SaveAs("Employees-Updated.xlsx");
}
catch (Exception ex)
{
    Console.WriteLine($"Error reading Excel file: {ex.Message}");
}
$vbLabelText   $csharpLabel

El bucle while termina cuando la columna A queda vacía, haciendo que el lector se adapte a hojas de cálculo de cualquier longitud sin requerir un conteo de filas codificado. La escritura de valores sigue la misma sintaxis de dirección de celda que la lectura, y SaveAs persiste los cambios en un nuevo archivo para que el original permanezca intacto. El bloque try/catch maneja archivos faltantes, libros de trabajo bloqueados y datos corruptos: todos los escenarios que ocurren en entornos de producción donde los archivos de entrada llegan desde fuentes externas.

Resultado

Lectura de archivos Excel en VB.NET usando IronXL: Una guía paso a paso sin Microsoft Office: Imagen 5 - Salida de datos de empleados

La guía para crear hojas de cálculo y la guía para convertir XLSX a CSV muestran cómo combinar la lectura y la escritura en flujos de trabajo de extremo a extremo. La guía de estilo de celdas cubre tamaños de fuente, colores y bordes cuando la salida formateada es un requisito.

Lectura de archivos Excel en VB.NET usando IronXL: Una guía paso a paso sin Microsoft Office: Imagen 6 - Salida de formulario de Windows


¿Cómo se manejan escenarios avanzados de lectura?

Varios escenarios menos comunes pero importantes surgen en proyectos reales. Los rangos nombrados, el descubrimiento de hojas de trabajo y la carga de CSV tienen cada uno soporte dedicado en la API.

Rangos nombrados le permiten referirse a los datos por una etiqueta lógica en lugar de una dirección de celda. Si el autor del libro de trabajo definió un rango nombrado llamado SalaryTable, lo accede directamente a través de GetRangeByName:

var range = workbook.GetRangeByName("SalaryTable");
decimal total = range.Sum();
Console.WriteLine($"Named range total: {total:C}");
var range = workbook.GetRangeByName("SalaryTable");
decimal total = range.Sum();
Console.WriteLine($"Named range total: {total:C}");
$vbLabelText   $csharpLabel

El descubrimiento de hojas de trabajo enumera cada hoja en el libro de trabajo, lo cual es útil al procesar archivos con un número variable de pestañas:

foreach (WorkSheet ws in workbook.WorkSheets)
    Console.WriteLine($"Sheet: {ws.Name}, Rows: {ws.RowCount}");
foreach (WorkSheet ws in workbook.WorkSheets)
    Console.WriteLine($"Sheet: {ws.Name}, Rows: {ws.RowCount}");
$vbLabelText   $csharpLabel

La carga de CSV utiliza un método dedicado optimizado para archivos de texto plano, devolviendo un WorkSheet que navega con la misma API de rango:

WorkBook csv    = WorkBook.LoadCSV("data.csv");
WorkSheet first = csv.DefaultWorkSheet;
Console.WriteLine(first["A1"].StringValue);
WorkBook csv    = WorkBook.LoadCSV("data.csv");
WorkSheet first = csv.DefaultWorkSheet;
Console.WriteLine(first["A1"].StringValue);
$vbLabelText   $csharpLabel

Estos patrones cubren los escenarios avanzados de lectura que aparecen en proyectos de migración de datos, canalizaciones ETL y sistemas de informes automatizados. Para la superficie completa de la API, consulte la referencia de objetos de IronXL.

Referencias autorizadas adicionales:


¿Cuales son tus próximos pasos?

IronXL transforma la lectura de archivos de Excel de un desafío de Interop lleno de dependencias a unas pocas líneas de código C# directo. Cargar libros de trabajo, extraer valores de tipo, iterar fila por fila, ejecutar cálculos agregados y manejar casos extremos siguen el mismo patrón API consistente, sin que Microsoft Office esté instalado en ningún lugar de su entorno de implementación.

Para pasar de tutorial a producción:

  1. Inicie una prueba gratuita para desbloquear todo el conjunto de características de IronXL y validarlo contra sus propios archivos Excel antes de comprometerse con una licencia.
  2. Explore la documentación completa de IronXL para guías sobre escritura, formato, estilo y conversión de hojas de cálculo.
  3. Explore la referencia de objetos y API completa para descubrir cada clase, método y propiedad disponible en la biblioteca.
  4. Revise la guía para crear hojas de cálculo cuando su flujo de trabajo requiera generar archivos de salida así como leer archivos de entrada.
  5. Consulte el índice de publicaciones del blog de IronXL para tutoriales adicionales que cubren escenarios del mundo real, como la generación de informes, validación de datos y consolidación de múltiples hojas.

Preguntas Frecuentes

¿Qué es IronXL?

IronXL es una biblioteca .NET que permite a los desarrolladores leer, editar y crear archivos de Excel en varios formatos, como XLSX y XLS, sin necesidad de tener instalado Microsoft Office.

¿Cómo leer archivos de Excel en C# con IronXL?

Llame a WorkBook.Load con la ruta del archivo para abrir el libro de trabajo, luego acceda a las celdas usando la notación A1 y propiedades escritas como StringValue, IntValue y DecimalValue.

¿Por qué elegir IronXL en lugar de Microsoft Office Interop para leer archivos de Excel?

IronXL no requiere la instalación de Microsoft Office, lo que elimina las dependencias COM y simplifica la implementación del lado del servidor.

¿Qué formatos de archivos Excel puede leer IronXL ?

IronXL lee los formatos XLSX, XLS, XLSM, CSV y TSV. La detección de formato es automática según la extensión del archivo.

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

Sí, IronXL está optimizado para el rendimiento y puede manejar archivos Excel grandes, lo que lo hace adecuado para aplicaciones con uso intensivo de datos.

¿ IronXL funciona con .NET 10?

Sí, IronXL admite versiones modernas de .NET , incluido .NET 10, así como proyectos de .NET Framework .

¿Cómo se ejecutan cálculos agregados con IronXL?

Utilice los métodos integrados Suma, Mín, Máx y Promedio en cualquier rango de celdas. Estos métodos omiten automáticamente las celdas vacías.

¿Puede IronXL leer archivos de Excel protegidos con contraseña?

Sí, pase la contraseña como segundo argumento a WorkBook.Load: WorkBook.Load("file.xlsx", "password").

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

Iron Support Team

We're online 24 hours, 5 days a week.
Chat
Email
Call Me