Saltar al pie de página
USANDO IRONXL

Leer un archivo Excel con Microsoft Office Interop Excel C#: Una forma más rápida de crear archivos Excel sin Office

Si alguna vez has intentado leer un archivo de Excel usando Microsoft Interoperabilidad de oficina Excel C#, ya conoces la frustración: incompatibilidades de versiones, fugas de objetos COM y el requisito indispensable de que Microsoft Office esté instalado en cada máquina que ejecute tu código. En este artículo, le explicaremos el enfoque tradicional de interoperabilidad, dónde falla y, a continuación, le mostraremos cómo IronXL le permite crear , leer y escribir archivos de Excel sin ninguno de esos problemas.

Empiece con IronXL ahora.
green arrow pointer

¿Cómo crea la biblioteca Interop un libro de Excel?

El espacio de nombres Microsoft.Office.Interop.Excel expone el mismo modelo de objetos COM que Excel utiliza internamente. Para leer o crear archivos de Excel a través de esta biblioteca de interoperabilidad, primero debe instanciar un objeto Application, agregar un nuevo libro de trabajo a su colección Workbooks y, a continuación, acceder a las celdas individuales de la hoja de cálculo. El siguiente ejemplo muestra una aplicación de consola mínima que utiliza Microsoft.Office.Interop.Excel para crear un archivo XLSX y escribir valores en las celdas.

using Excel = Microsoft.Office.Interop.Excel;
using System.Runtime.InteropServices;
// Create the Excel Application COM object
Excel.Application excelApp = new Excel.Application();
if (excelApp == null)
{
    Console.WriteLine("Error: Excel is not properly installed.");
    return;
}
// Add a new workbook and access the default worksheet
Excel.Workbook xlWorkBook = excelApp.Workbooks.Add(Type.Missing);
Excel.Worksheet xlWorkSheet = (Excel.Worksheet)xlWorkBook.ActiveSheet;
// Write data into specific cells
xlWorkSheet.Cells[1, 1] = "Product";
xlWorkSheet.Cells[1, 2] = "Price";
xlWorkSheet.Cells[2, 1] = "Widget";
xlWorkSheet.Cells[2, 2] = "29.99";
// Save as an XLSX file and clean up COM objects
string filepath = @"C:\Reports\products.xlsx";
xlWorkBook.SaveAs(filepath);
xlWorkBook.Close(false);
excelApp.Quit();
// Release every COM object to prevent orphaned Excel processes
Marshal.ReleaseComObject(xlWorkSheet);
Marshal.ReleaseComObject(xlWorkBook);
Marshal.ReleaseComObject(excelApp);
using Excel = Microsoft.Office.Interop.Excel;
using System.Runtime.InteropServices;
// Create the Excel Application COM object
Excel.Application excelApp = new Excel.Application();
if (excelApp == null)
{
    Console.WriteLine("Error: Excel is not properly installed.");
    return;
}
// Add a new workbook and access the default worksheet
Excel.Workbook xlWorkBook = excelApp.Workbooks.Add(Type.Missing);
Excel.Worksheet xlWorkSheet = (Excel.Worksheet)xlWorkBook.ActiveSheet;
// Write data into specific cells
xlWorkSheet.Cells[1, 1] = "Product";
xlWorkSheet.Cells[1, 2] = "Price";
xlWorkSheet.Cells[2, 1] = "Widget";
xlWorkSheet.Cells[2, 2] = "29.99";
// Save as an XLSX file and clean up COM objects
string filepath = @"C:\Reports\products.xlsx";
xlWorkBook.SaveAs(filepath);
xlWorkBook.Close(false);
excelApp.Quit();
// Release every COM object to prevent orphaned Excel processes
Marshal.ReleaseComObject(xlWorkSheet);
Marshal.ReleaseComObject(xlWorkBook);
Marshal.ReleaseComObject(excelApp);
Imports Excel = Microsoft.Office.Interop.Excel
Imports System.Runtime.InteropServices

' Create the Excel Application COM object
Dim excelApp As Excel.Application = New Excel.Application()
If excelApp Is Nothing Then
    Console.WriteLine("Error: Excel is not properly installed.")
    Return
End If

' Add a new workbook and access the default worksheet
Dim xlWorkBook As Excel.Workbook = excelApp.Workbooks.Add(Type.Missing)
Dim xlWorkSheet As Excel.Worksheet = CType(xlWorkBook.ActiveSheet, Excel.Worksheet)

' Write data into specific cells
xlWorkSheet.Cells(1, 1) = "Product"
xlWorkSheet.Cells(1, 2) = "Price"
xlWorkSheet.Cells(2, 1) = "Widget"
xlWorkSheet.Cells(2, 2) = "29.99"

' Save as an XLSX file and clean up COM objects
Dim filepath As String = "C:\Reports\products.xlsx"
xlWorkBook.SaveAs(filepath)
xlWorkBook.Close(False)
excelApp.Quit()

' Release every COM object to prevent orphaned Excel processes
Marshal.ReleaseComObject(xlWorkSheet)
Marshal.ReleaseComObject(xlWorkBook)
Marshal.ReleaseComObject(excelApp)
$vbLabelText   $csharpLabel

El código anterior crea un libro de Excel , rellena una hoja de cálculo con valores de filas y celdas, guarda el archivo y, a continuación, libera manualmente cada objeto COM. Esa limpieza final no es opcional; si la omites, encontrarás procesos fantasma de EXCEL.EXE consumiendo memoria en tu sistema. Observe también que el código comprueba si el objeto Application es nulo; Si Microsoft Office no está instalado, cada línea que siga generará un error. La versión de la biblioteca de interoperabilidad de Office debe coincidir con la versión de Office instalada en el equipo; de lo contrario, se producirán errores de tiempo de ejecución como FileNotFoundException, que son notoriamente difíciles de depurar.

Los desarrolladores de Visual Basic se enfrentan a los mismos desafíos al usar Excel Microsoft.Office.Interop.Excel, porque la infraestructura COM subyacente es idéntica en todos los lenguajes .NET .

¿Qué problemas genera el enfoque de interoperabilidad en los servidores y en la nube?

Microsoft desaconseja explícitamente el uso de Interoperabilidad de oficina en entornos de servidor. La biblioteca de interoperabilidad inicia una instancia completa de la aplicación Excel en segundo plano, lo que significa que cada solicitud a un servidor web o aplicación en la nube activa un proceso oculto en el escritorio de Windows. En un servidor Linux, no funcionará en absoluto. Las cadenas de conexión a las bases de datos, las rutas del sistema de archivos y los permisos de usuario se convierten en puntos de fallo adicionales cuando Office no está instalado o cuando las diferentes versiones de Microsoft Office entran en conflicto entre sí.

Los desarrolladores suelen publicar sobre estos problemas en Stack Overflow y Microsoft Q&A , buscando maneras de leer y crear archivos de Excel sin tener Excel instalado. La siguiente tabla resume las principales diferencias.

| Característica | Interoperabilidad de oficina | IronXL| | ---| ---| ---| | Requiere tener Excel instalado. | Sí, solo la máquina del desarrollador y todos los servidores de producción. | No | | Formatos de archivo de Excel compatibles | XLS, XLSX| XLS, XLSX, CSV, TSV, JSON, XML| | Multiplataforma (.NET Core, Linux, macOS) | Sólo para Windows| Windows, Linux, macOS, Azure| | Se requiere la limpieza del objeto COM | Sí, manual Marshal.ReleaseComObject | No | | Implementación en servidor/nube | Microsoft no lo recomienda. | Totalmente compatible| | Rendimiento| Más lento: inicia un proceso oculto de Excel. | Mejor rendimiento: código .NET administrado | | Compatibilidad con .NET Framework y .NET Core | Solo para .NET Framework | .NET Framework, .NET Core, .NET 5–10 |

¿Cómo se pueden crear archivos de Excel sin tener Microsoft Office instalado?

IronXL es una biblioteca .NET para Excel que lee, escribe y crea archivos de Excel completamente en código administrado. No hay dependencia de Microsoft Office, ni objetos COM que publicar, ni conflictos de versiones que depurar. Instálalo a través de NuGet en Visual Studio usando el Explorador de soluciones, busca IronXLy listo. Funciona correctamente en .NET Framework 4.6.2+, .NET Core y .NET 5 a .NET 10 en todos los sistemas operativos principales.

using IronXL;
// Create a new Excel workbook — default value is XLSX format
WorkBook workBook = WorkBook.Create(ExcelFileFormat.XLSX);
// Add a worksheet and populate cells with data
WorkSheet workSheet = workBook.CreateWorkSheet("Sales");
workSheet["A1"].Value = "Product";
workSheet["B1"].Value = "Price";
workSheet["A2"].Value = "Widget";
workSheet["B2"].Value = 29.99;
// Apply basic formatting
workSheet["A1"].Style.Font.Bold = true;
workSheet["B1"].Style.Font.Bold = true;
// Save the XLSX file
workBook.SaveAs(@"C:\Reports\products.xlsx");
using IronXL;
// Create a new Excel workbook — default value is XLSX format
WorkBook workBook = WorkBook.Create(ExcelFileFormat.XLSX);
// Add a worksheet and populate cells with data
WorkSheet workSheet = workBook.CreateWorkSheet("Sales");
workSheet["A1"].Value = "Product";
workSheet["B1"].Value = "Price";
workSheet["A2"].Value = "Widget";
workSheet["B2"].Value = 29.99;
// Apply basic formatting
workSheet["A1"].Style.Font.Bold = true;
workSheet["B1"].Style.Font.Bold = true;
// Save the XLSX file
workBook.SaveAs(@"C:\Reports\products.xlsx");
Imports IronXL

' Create a new Excel workbook — default value is XLSX format
Dim workBook As WorkBook = WorkBook.Create(ExcelFileFormat.XLSX)
' Add a worksheet and populate cells with data
Dim workSheet As WorkSheet = workBook.CreateWorkSheet("Sales")
workSheet("A1").Value = "Product"
workSheet("B1").Value = "Price"
workSheet("A2").Value = "Widget"
workSheet("B2").Value = 29.99
' Apply basic formatting
workSheet("A1").Style.Font.Bold = True
workSheet("B1").Style.Font.Bold = True
' Save the XLSX file
workBook.SaveAs("C:\Reports\products.xlsx")
$vbLabelText   $csharpLabel

Archivo de Excel creado con IronXL

Lectura de archivos Excel con Microsoft Interoperabilidad de oficina Excel C#: Y una forma más rápida de crear archivos Excel sin Office: Imagen 1 - Archivo de salida IronXL

El código anterior logra el mismo resultado que el ejemplo de Interop, pero con la mitad de líneas y sin dependencias externas. WorkBook.Create() inicializa un nuevo libro de trabajo en el formato de archivo de Excel especificado (XLSX por defecto), y CreateWorkSheet agrega una hoja de cálculo con nombre. Los valores de las celdas se establecen mediante una sintaxis de indexación clara, y la función SaveAs gestiona automáticamente la extensión del archivo. Sin Quit(), sin Marshal.ReleaseComObject, sin proceso oculto. La misma API también permite guardar archivos en formato XLS, CSV, JSON o XML con una sola llamada a un método. Consulte la documentación de exportación para conocer todas las opciones disponibles.

IronXL también se integra perfectamente con los objetos System.Data, de modo que los datos que fluyen desde las cadenas de conexión a la base de datos a través de un DataTable se pueden escribir directamente en una hoja de cálculo sin necesidad de iterar manualmente fila por fila.

¿Cómo se pueden leer y escribir los datos de una hoja de cálculo en filas y celdas?

Leer archivos de Excel existentes es igual de sencillo. El método WorkBook.Load acepta una ruta de archivo (en formato de cadena) a cualquier archivo XLS, XLSXo CSV. A partir de ahí, cada hoja de cálculo expone sus filas y celdas como colecciones iterables, lo que facilita la lectura de datos, la modificación de valores o la carga de resultados a una base de datos o servidor.

using IronXL;
// Load an existing Excel file
WorkBook workBook = WorkBook.Load(@"C:\Reports\products.xlsx");
WorkSheet workSheet = workBook.DefaultWorkSheet;
// Read and display each row of data
foreach (var row in workSheet.Rows)
{
    foreach (var cell in row.ToArray())
    {
        Console.Write(cell.Value + "\t");
    }
    Console.WriteLine();
}
// Update a specific cell and save
workSheet["B2"].Value = 34.99;
workBook.SaveAs(@"C:\Reports\products_updated.xlsx");
using IronXL;
// Load an existing Excel file
WorkBook workBook = WorkBook.Load(@"C:\Reports\products.xlsx");
WorkSheet workSheet = workBook.DefaultWorkSheet;
// Read and display each row of data
foreach (var row in workSheet.Rows)
{
    foreach (var cell in row.ToArray())
    {
        Console.Write(cell.Value + "\t");
    }
    Console.WriteLine();
}
// Update a specific cell and save
workSheet["B2"].Value = 34.99;
workBook.SaveAs(@"C:\Reports\products_updated.xlsx");
Imports IronXL

' Load an existing Excel file
Dim workBook As WorkBook = WorkBook.Load("C:\Reports\products.xlsx")
Dim workSheet As WorkSheet = workBook.DefaultWorkSheet

' Read and display each row of data
For Each row In workSheet.Rows
    For Each cell In row.ToArray()
        Console.Write(cell.Value & vbTab)
    Next
    Console.WriteLine()
Next

' Update a specific cell and save
workSheet("B2").Value = 34.99
workBook.SaveAs("C:\Reports\products_updated.xlsx")
$vbLabelText   $csharpLabel

Lectura de archivos de Excel con IronXL

Lectura de archivos Excel con Microsoft Interoperabilidad de oficina Excel C#: Y Una Manera Más Rápida De Crear Archivos Excel Sin Office: Imagen 2 - Leer salida de archivo de Excel con IronXL

Este ejemplo muestra cómo leer archivos de Excel iterando sobre la colección de filas y accediendo a la propiedad Valor de cada celda. El patrón de bucle anidado —var fila seguido de var celda— refleja la forma en que uno pensaría naturalmente en una hoja de cálculo. Tras leer los datos, el código actualiza una sola celda y guarda el libro de trabajo en un nuevo archivo XLSX, conservando el original. IronXLrecalcula automáticamente cualquier fórmula de Excel cuando se modifica una hoja, una función que también ofrece la biblioteca de interoperabilidad, pero a costa de iniciar una instancia completa de Excel.

Para escenarios más avanzados, como fórmulas, formato condicional, combinación de celdas o trabajo con varias hojas, la referencia de la API de IronXL cubre todos los métodos y propiedades disponibles. La biblioteca también admite el acceso desde controladores ASP.NET , lo que facilita la generación y descarga de archivos de Excel desde una aplicación web o un punto final de API sin necesidad de tener Office instalado en el servidor.

¿Cuál es la mejor manera de avanzar en la automatización de Excel con .NET ?

Si un proyecto está vinculado a un entorno de escritorio Windows heredado donde Microsoft Office ya está instalado y la misma versión se mantendrá estable, la biblioteca de interoperabilidad puede funcionar correctamente para tareas básicas. Pero para todo lo demás, ya sean implementaciones en servidores, aplicaciones en la nube, compilaciones multiplataforma o cualquier escenario en el que se desee un mejor rendimiento y menos errores en tiempo de ejecución, una biblioteca .NET Excel independiente es la opción más lógica.

IronXL gestiona todas las operaciones comunes de Excel ( creación de libros de trabajo , lectura de datos de hojas de cálculo de Excel, escritura en celdas, guardado en múltiples tipos de extensiones de archivo, incluyendo XLS y XLSX) a través de una API limpia y moderna que se ejecuta en cualquier lugar donde se ejecute .NET . Es compatible con proyectos de C# y Visual Basic, y el mismo código funciona en Windows, Linux y macOS sin modificaciones.

Comience una prueba gratuita de 30 días para probarlo en su propio proyecto, o explore las opciones de licencia cuando esté listo para implementarlo.

Preguntas Frecuentes

¿Cuáles son las limitaciones del uso de Microsoft Office Interop Excel en C#?

El uso de Microsoft Office Interop Excel en C# puede dar lugar a problemas como desajustes de versión, fugas de objetos COM y la necesidad de tener Microsoft Office instalado en cada máquina que ejecute el código.

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

IronXL permite crear, leer y escribir archivos de Excel sin necesidad de Microsoft Office, eliminando problemas como desajustes de versión y fugas de objetos COM.

¿Puede utilizarse IronXL en un servidor sin Microsoft Office instalado?

Sí, IronXL es seguro para servidores y no requiere la instalación de Microsoft Office, lo que lo convierte en una solución multiplataforma para el manejo de archivos de Excel.

¿Cuáles son los beneficios de usar IronXL sobre Excel Interop?

IronXL proporciona una forma más fiable y eficiente de manejar archivos de Excel, ya que no depende de Microsoft Office, lo que reduce el riesgo de problemas comunes, como desajustes de versión y fugas de objetos COM.

¿Es IronXL compatible con todas las versiones de archivos Excel?

IronXL es compatible con una amplia gama de formatos de archivo de Excel, incluidos XLSX, XLS, CSV y TSV, lo que lo hace versátil para diversas operaciones con archivos de Excel.

¿Requiere IronXL alguna configuración especial para funcionar en una máquina?

IronXL no requiere la instalación de Microsoft Office y puede integrarse fácilmente en sus proyectos de C# sin necesidad de una configuración especial.

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

Sí, IronXL está diseñado para leer y escribir eficientemente grandes archivos de Excel, proporcionando un rendimiento rápido sin las limitaciones de Interop.

¿Con qué plataformas es compatible IronXL?

IronXL es multiplataforma, compatible con Windows, Linux y MacOS, lo que lo convierte en una opción flexible para la manipulación de archivos de Excel en diferentes entornos.

¿Cómo maneja IronXL la creación de archivos de Excel?

IronXL proporciona una API sencilla para crear archivos de Excel mediante programación en C#, ofreciendo funciones para formatear celdas, gestionar hojas de trabajo y mucho más.

¿Existe una comunidad o soporte para los usuarios de IronXL?

Sí, los usuarios de IronXL pueden acceder a documentación, tutoriales y soporte de la comunidad para ayudar con cualquier pregunta de integración o uso.

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

Equipo de soporte de Iron

Estamos disponibles online las 24 horas, 5 días a la semana.
Chat
Email
Llámame