Pruebas en un entorno real
Pruebe en producción sin marcas de agua.
Funciona donde lo necesites.
Las herramientas de MS Office, como Word, Excel, PowerPoint, etc., son muy populares y se utilizan ampliamente en todo tipo de empresas. La creación de archivos de informes en formato Excel es una función que muchos usuarios necesitan en sus aplicaciones informáticas, y ahora existe una forma definitiva de incluir esta función en las aplicaciones informáticas utilizando las distintas bibliotecas disponibles.
En este artículo vamos a discutir y comparar cómo trabajar con archivos de Microsoft Excel mediante programación en C# utilizando las dos bibliotecas más populares, IronXL y Microsoft Office Excel Interop.
Tanto IronXL como Microsoft Excel Interop proporcionan métodos para crear, editar y leer documentos de Excel en entornos .NET. La siguiente cuestión es decidir qué Biblioteca Excel en C es el más adecuado para su proyecto. Este artículo le ayudará a decidir cuál es la mejor opción para sus aplicaciones.
Veamos en primer lugar lo que ofrecen ambas bibliotecas, y luego pasemos a la comparación propiamente dicha.
IronXL es una biblioteca .NET que facilita la lectura y edición de documentos de Microsoft Excel en C#. IronXL.Excel es una biblioteca de software .NET independiente para leer una amplia gama de formatos de hojas de cálculo. No requiere la instalación de Microsoft Excel ni depende de Interop.
IronXL es una intuitiva API de C# que permite leer, editar y crear archivos de hojas de cálculo Excel en .NET con un rendimiento rapidísimo. IronXL es totalmente 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 C# de .NET core y .NET framework.
**Documentos y asistencia
Recortes y tutoriales útiles para empezar enironsoftware.com
-Repositorios de GitHub con más ejemplos
El espacio de nombres Microsoft.Office.Interop.Excel proporciona métodos para interactuar con la aplicación Microsoft Excel en C# y Visual Basic. Podemos crear nuevos libros de Excel, hojas de Excel, mostrar datos en hojas existentes, modificar el contenido de hojas de Excel existentes y mucho más con este espacio de nombres.
Las clases e interfaces de Microsoft.Office.Interop.Excel proporcionan soporte para la interoperabilidad entre el modelo de objetos COM de los archivos de Microsoft Excel y las aplicaciones gestionadas que automatizan archivos xls o xlsx.
El lenguaje de programación C# incluye funciones que facilitan el trabajo con los objetos de la API Microsoft Office Interop. Las nuevas funciones incluyen argumentos con nombre y opcionales, un nuevo tipo denominado dinámico y la posibilidad de pasar argumentos a parámetros de referencia en métodos COM como si fueran parámetros de valor. Esto lo convierte en la mejor opción para trabajar con objetos COM e Interop.
**Nota: Los objetos de Microsoft Excel Interop necesitan que Microsoft Excel esté instalado en el ordenador.
El resto del artículo es el siguiente:
Crear una aplicación de consola
Instalación de la librería IronXL C#
Instalación de Microsoft Office Interop Excel
Crear un nuevo libro y hoja de Excel
Leer archivos Excel
Trabajar con rangos de valores en archivos Excel
Trabajar con fórmulas de Excel
Licencias
Siga los siguientes pasos para crear una Aplicación de Consola:
En la pantalla Información adicional, especifique la versión de Framework que desea utilizar. En este ejemplo utilizaremos .NET Framework 4.8.
Haga clic en Crear para completar el proceso.
Ahora el proyecto está creado y estamos casi listos para probar las bibliotecas. Sin embargo, aún tenemos que instalarlos e integrarlos en nuestro proyecto. Primero instalemos IronXL.
Puede descargar e instalar la biblioteca IronXL mediante los siguientes métodos:
Uso de Visual Studio con paquetes NuGet.
Descargue directamente el paquete NuGet.
Instalar manualmente con la DLL.
Analicemos cada uno de ellos.
Visual Studio proporciona el gestor de paquetes NuGet para instalar paquetes NuGet en sus proyectos. Puede acceder a él a través del menú Proyecto o haciendo clic con el botón derecho del ratón en el Explorador de soluciones.
Ahora, desde la pestaña Examinar -> busca IronXL.Excel -> Instalar
Otra forma de descargar e instalar Microsoft.Office.Interop.Excel C# Library es hacer uso de los siguientes pasos para instalar el paquete NuGet a través del símbolo del sistema del desarrollador.
Abra el Instructor de comandos para desarrolladores, que suele encontrarse en la carpeta de Visual Studio.
Escribe el siguiente comando:
PM> Install-Package Microsoft.Office.Interop.Excel
En el Explorador de soluciones, haga clic con el botón derecho en el archivo Program.cs y, a continuación, haga clic en Ver código.
using Excel = Microsoft.Office.Interop.Excel;
using Excel = Microsoft.Office.Interop.Excel;
Imports Excel = Microsoft.Office.Interop.Excel
Un libro de trabajo es un archivo Excel que contiene varias hojas de trabajo con filas y columnas. Ambas bibliotecas permiten crear un nuevo libro y hojas de Excel. Veamos el código paso a paso.
No podría ser más fácil crear un nuevo Libro de Excel usando IronXL! Sólo una línea de código! Sí, de verdad. Añada el siguiente código a su función static void main en el archivo Program.cs:
WorkBook workbook = WorkBook.Create(ExcelFileFormat.XLSX);
WorkBook workbook = WorkBook.Create(ExcelFileFormat.XLSX);
Dim workbook As WorkBook = WorkBook.Create(ExcelFileFormat.XLSX)
Ambos XLS(versión anterior del archivo Excel) y XLSX(versión actual y más reciente del archivo) formatos de archivo pueden crearse con IronXL.
Además, es aún más fácil crear una hoja de cálculo por defecto:
var worksheet = workbook.CreateWorkSheet("IronXL Features");
var worksheet = workbook.CreateWorkSheet("IronXL Features");
Dim worksheet = workbook.CreateWorkSheet("IronXL Features")
Ahora puede utilizar la variable de hoja de cálculo para establecer valores de celda y hacer casi todo lo que puede hacer un archivo de Excel.
Para crear un archivo Excel utilizando Microsoft.Office.Interop, es necesario tener instalado Microsoft Excel. Por lo tanto, tenemos que comprobar si Microsoft Excel está instalado en la máquina host - si no, simplemente devolverá una excepción que necesita ser manejada. Los siguientes ejemplos de código permiten comprobar la instalación de una aplicación Excel y crear libros y hojas de Excel:
Compruebe Microsoft Excel instalado:
//Start Excel and get Application object.
Excel.Application xlApp = new Excel.Application();
//Checks if Excel is installed
if (xlApp == null)
{
Console.WriteLine("Excel is not installed in the system...");
return;
}
//Start Excel and get Application object.
Excel.Application xlApp = new Excel.Application();
//Checks if Excel is installed
if (xlApp == null)
{
Console.WriteLine("Excel is not installed in the system...");
return;
}
'Start Excel and get Application object.
Dim xlApp As New Excel.Application()
'Checks if Excel is installed
If xlApp Is Nothing Then
Console.WriteLine("Excel is not installed in the system...")
Return
End If
Crear libro de trabajo y hoja de cálculo:
//Create Workbook and Worksheet
object misValue = System.Reflection.Missing.Value;
Excel.Workbook xlWorkBook = xlApp.Workbooks.Add(misValue);
Excel.Worksheet xlWorkSheet = (Excel.Worksheet)xlWorkBook.Worksheets.get_Item(1);
//Create Workbook and Worksheet
object misValue = System.Reflection.Missing.Value;
Excel.Workbook xlWorkBook = xlApp.Workbooks.Add(misValue);
Excel.Worksheet xlWorkSheet = (Excel.Worksheet)xlWorkBook.Worksheets.get_Item(1);
'Create Workbook and Worksheet
Dim misValue As Object = System.Reflection.Missing.Value
Dim xlWorkBook As Excel.Workbook = xlApp.Workbooks.Add(misValue)
Dim xlWorkSheet As Excel.Worksheet = CType(xlWorkBook.Worksheets.Item(1), Excel.Worksheet)
Hasta ahora, observando ambos códigos, la ventaja la tiene IronXL sobre Office Interop Excel. IronXL utiliza una sola línea de código para poder trabajar con archivos Excel, sin complicaciones ni dependencias adicionales.
Ambas bibliotecas pueden abrir y leer documentos Excel existentes. Veamos el código de ejemplo.
La clase IronXL WorkBook representa una hoja de Excel. Para abrir un archivo Excel utilizando C#, utilizamos WorkBook.Load y especificamos la ruta del archivo Excel(.xlsx). El siguiente código de una línea se utiliza para abrir el archivo para su 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")
Cada WorkBook puede tener varios objetos WorkSheet. Representan hojas de trabajo en el documento Excel. Si el libro contiene hojas de cálculo, recupérelas 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")
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
Esto también utiliza una línea de código para abrir un libro de trabajo y una hoja. El código es el siguiente:
Excel.Application xlApp = new Excel.Application();
//Load WorkBook
Excel.Workbook xlWorkBook = xlApp.Workbooks.Open(filePath);
//Open Sheet for reading
Excel.Worksheet xlWorkSheet = (Excel.Worksheet)xlWorkBook.Worksheets.get_Item(1);
Excel.Application xlApp = new Excel.Application();
//Load WorkBook
Excel.Workbook xlWorkBook = xlApp.Workbooks.Open(filePath);
//Open Sheet for reading
Excel.Worksheet xlWorkSheet = (Excel.Worksheet)xlWorkBook.Worksheets.get_Item(1);
Dim xlApp As New Excel.Application()
'Load WorkBook
Dim xlWorkBook As Excel.Workbook = xlApp.Workbooks.Open(filePath)
'Open Sheet for reading
Dim xlWorkSheet As Excel.Worksheet = CType(xlWorkBook.Worksheets.Item(1), Excel.Worksheet)
Código para leer los valores de las celdas:
//Get the entire range of cells
Excel.Range xlRange = xlWorkSheet.UsedRange;
//Reading first 10 rows of with two columns
for (int rowCount = 1; rowCount <= 10; rowCount++)
{
firstValue = Convert.ToString((xlRange.Cells [rowCount, 1] as Excel.Range).Text);
secondValue = Convert.ToString((xlRange.Cells [rowCount, 2] as Excel.Range).Text);
Console.WriteLine(firstValue + "\t" + secondValue);
}
//Get the entire range of cells
Excel.Range xlRange = xlWorkSheet.UsedRange;
//Reading first 10 rows of with two columns
for (int rowCount = 1; rowCount <= 10; rowCount++)
{
firstValue = Convert.ToString((xlRange.Cells [rowCount, 1] as Excel.Range).Text);
secondValue = Convert.ToString((xlRange.Cells [rowCount, 2] as Excel.Range).Text);
Console.WriteLine(firstValue + "\t" + secondValue);
}
Imports Microsoft.VisualBasic
'Get the entire range of cells
Dim xlRange As Excel.Range = xlWorkSheet.UsedRange
'Reading first 10 rows of with two columns
For rowCount As Integer = 1 To 10
firstValue = Convert.ToString((TryCast(xlRange.Cells (rowCount, 1), Excel.Range)).Text)
secondValue = Convert.ToString((TryCast(xlRange.Cells (rowCount, 2), Excel.Range)).Text)
Console.WriteLine(firstValue & vbTab & secondValue)
Next rowCount
Sin embargo, comprobar la instalación de Excel y crear su instancia es una parte integral.
En IronXL, con una línea de código, podemos obtener el rango de valores de celdas particulares. A continuación, mediante un bucle, se puede leer o editar el valor de cada celda. El código es el siguiente:
WorkBook workbook = WorkBook.Load("test.xls");
WorkSheet sheet = workbook.WorkSheets.First();
//This is how we get range from Excel worksheet
var range = sheet ["A2:A8"];
//This is how we can iterate over our range and read or edit any cell
foreach (var cell in range)
{
Console.WriteLine(cell.Value);
}
WorkBook workbook = WorkBook.Load("test.xls");
WorkSheet sheet = workbook.WorkSheets.First();
//This is how we get range from Excel worksheet
var range = sheet ["A2:A8"];
//This is how we can iterate over our range and read or edit any cell
foreach (var cell in range)
{
Console.WriteLine(cell.Value);
}
Dim workbook As WorkBook = WorkBook.Load("test.xls")
Dim sheet As WorkSheet = workbook.WorkSheets.First()
'This is how we get range from Excel worksheet
Dim range = sheet ("A2:A8")
'This is how we can iterate over our range and read or edit any cell
For Each cell In range
Console.WriteLine(cell.Value)
Next cell
Esto también utiliza una línea de código para obtener el rango de valores de las celdas. A continuación, las celdas pueden actualizarse con los valores requeridos. El código es el siguiente:
Excel.Application xlApp = new Excel.Application();
Excel.Workbook xlWorkBook = xlApp.Workbooks.Open(filePath);
Excel.Worksheet xlWorkSheet = (Excel.Worksheet)xlWorkBook.Worksheets.get_Item(1);
//Get range of values and updating their format
var range = xlWorkSheet.get_Range("A1", "D1");
range.NumberFormat = "$0.00";
Excel.Application xlApp = new Excel.Application();
Excel.Workbook xlWorkBook = xlApp.Workbooks.Open(filePath);
Excel.Worksheet xlWorkSheet = (Excel.Worksheet)xlWorkBook.Worksheets.get_Item(1);
//Get range of values and updating their format
var range = xlWorkSheet.get_Range("A1", "D1");
range.NumberFormat = "$0.00";
Dim xlApp As New Excel.Application()
Dim xlWorkBook As Excel.Workbook = xlApp.Workbooks.Open(filePath)
Dim xlWorkSheet As Excel.Worksheet = CType(xlWorkBook.Worksheets.Item(1), Excel.Worksheet)
'Get range of values and updating their format
Dim range = xlWorkSheet.get_Range("A1", "D1")
range.NumberFormat = "$0.00"
Las fórmulas de Excel constituyen la parte más importante del trabajo con archivos Excel. Ambas bibliotecas permiten trabajar con fórmulas y aplicarlas a las celdas con facilidad.
Después de cargar el libro y la hoja de trabajo, se puede utilizar el siguiente ejemplo de código para realizar cambios en las fórmulas o aplicarlos 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()
También puede recuperar fórmulas y sus valores.
// Get Formulas
// Get the formula's calculated value. e.g. "52"
string formulaValue = worksheet ["G30"].Value;
//Get the formula as a string. e.g. "Max(C3:C7)"
string formulaString = worksheet ["G30"].Formula;
//Save your changes with updated formulas and calculated values.
workbook.Save();
// Get Formulas
// Get the formula's calculated value. e.g. "52"
string formulaValue = worksheet ["G30"].Value;
//Get the formula as a string. e.g. "Max(C3:C7)"
string formulaString = worksheet ["G30"].Formula;
//Save your changes with updated formulas and calculated values.
workbook.Save();
' Get Formulas
' Get the formula's calculated value. e.g. "52"
Dim formulaValue As String = worksheet ("G30").Value
'Get the formula as a string. e.g. "Max(C3:C7)"
Dim formulaString As String = worksheet ("G30").Formula
'Save your changes with updated formulas and calculated values.
workbook.Save()
Del mismo modo, después de cargar el libro y la hoja de cálculo, se puede utilizar el siguiente código para trabajar con las fórmulas de Excel. El ejemplo de código es el siguiente:
//Get range of values and updating their format
var range1 = xlWorkSheet.get_Range("A1", "D1");
var range2 = xlWorkSheet.get_Range("C2", "C6");
// Set Formula
range1.Formula = "=RAND()*100000";
range2.Formula = "=A2 & \" \" & B2";
//Get range of values and updating their format
var range1 = xlWorkSheet.get_Range("A1", "D1");
var range2 = xlWorkSheet.get_Range("C2", "C6");
// Set Formula
range1.Formula = "=RAND()*100000";
range2.Formula = "=A2 & \" \" & B2";
'Get range of values and updating their format
Dim range1 = xlWorkSheet.get_Range("A1", "D1")
Dim range2 = xlWorkSheet.get_Range("C2", "C6")
' Set Formula
range1.Formula = "=RAND()*100000"
range2.Formula = "=A2 & "" "" & B2"
IronXL es una librería de C# Excel abiertamente comercial. Es gratuito para el desarrollo y siempre se puede obtener una licencia para su implantación comercial. Licencias disponibles para uso en un solo proyecto, desarrolladores individuales, agencias y corporaciones globales, así como SaaS y redistribución OEM. Todas las licencias incluyen una garantía de devolución del dinero de 30 días, un año de asistencia técnica y actualizaciones del producto, validez para desarrollo/montaje/producción y también una licencia permanente.(compra única). El paquete Lite parte de $749.
En el caso de Microsoft Office Interop Excel, las aplicaciones que utilicen este archivo DLL no requieren una licencia independiente ni para uso individual ni para uso comercial. Para que cualquier solución funcione con una aplicación de Office, las aplicaciones de Microsoft Office deben estar instaladas y tener licencia en el equipo donde se ejecuta la solución. La DLL siempre estará presente en una máquina en la que esté instalada la aplicación de Office, y se registrará allí. Al mismo tiempo, el conjunto primario de interoperabilidad(PIAs) necesarios para las soluciones .NET que utilicen la "interop" también se instalarán en el GAC.
Resumen
Lectura y creación de Excel(XLS, XLSX y CSV) en C# y todos los demás lenguajes .NET es fácil utilizando la biblioteca de software IronXL de Iron Software. IronXL no requiere que Excel esté instalado en su servidor o Interop. IronXL proporciona una API más rápida e intuitiva que Microsoft.Office.Interop.Excel. IronXL funciona en .NET Core 2, Framework 4.5, Azure, Mono y, Mobile y Xamarin.
Interoperabilidad con Microsoft Office(Automatización de Excel) es una opción al crear/leer archivos Excel(XLS, XLSX, CSV) desde aplicaciones C# o VB.NET. Requiere que todas las máquinas cliente tengan instalada la misma versión de Microsoft Excel y sólo funciona en sistemas operativos Windows.
Conclusión
Aquí, IronXL tiene una clara ventaja sobre Microsoft.Office.Interop.Excel, ya que no requiere que la aplicación Microsoft Office Excel esté instalada en la máquina local o en el servidor para funcionar. Además, cuando se utiliza Excel Automation, Microsoft Excel se carga en segundo plano, utilizando una gran cantidad de MB y cargando un gran número de archivos y DLLs en comparación con IronXL. IronXL tiene una API más rápida e intuitiva que la de Microsoft.Office.Interop.Excel.
Aplicaciones de Microsoft Office(incluido Excel) se diseñaron como aplicaciones de interfaz de usuario, por lo que la API es muy lenta. Microsoft no recomienda utilizar Excel Automation(o cualquier Office Interop) en el servidor. En este caso, con todas sus sólidas funciones, IronXL es la mejor opción para la integración en aplicaciones de software.
9 productos API .NET para sus documentos de oficina