Pruebe en producción sin marcas de agua.
Funciona donde lo necesite.
Obtén 30 días de producto totalmente funcional.
Ténlo en funcionamiento en minutos.
Acceso completo a nuestro equipo de asistencia técnica durante la prueba del producto
Como ya sabrá, Excel es probablemente la aplicación de hoja de cálculo más utilizada del mundo. Entre los usuarios se incluyen tanto los desarrolladores como la población en general, pero son los desarrolladores quienes probablemente estarán más interesados en este artículo. Al principio, los desarrolladores no disponían de muchas opciones para trabajar con Excel en sus distintas aplicaciones. Sin embargo, había VBA (Visual Basic for Applications) integrado en el Office Suite con el cual podías manipular cualquier producto de Office según tus necesidades.
Los desarrolladores utilizaban VBA en Excel para personalizar sus interacciones con Excel y sus datos, incluso sus capacidades visuales. Pero, finalmente, esto no fue suficiente. Los desarrolladores querían más y empezaron a utilizar Office.Interop.
En este artículo, compararé dos librerías Excel muy buenas que no dependen de Office.Interop para trabajar con Excel. Lo son:
NPOI
Verá y aprenderá lo que puede hacer cada biblioteca de Excel y, a continuación, comparará las dos mediante ejemplos de código y tutoriales paso a paso. Aunque este artículo no puede cubrir todas las características de ambas bibliotecas de Excel, explicará los usos más comunes y populares de cada una.
GetSheetAt
GetRow
GetCell
NPOI es la versión .NET del proyecto POI Java en [http://poi.apache.org/](http://poi.apache.org/" target="_blank" rel="nofollow). POI es un proyecto de código abierto que puede ayudarte a leer/escribir archivos xls, doc, ppt. Tiene una amplia gama de aplicaciones.
Por ejemplo, puedes utilizarlo para:
NPOI es un puerto de C# del proyecto [POI Java](http://poi.apache.org/" target="_blank" rel="nofollow) de Apache. Es gratuito y de código abierto. Además, no necesita Interop, lo que significa que los usuarios no necesitarán tener Excel instalado para que la aplicación del desarrollador funcione con él.
IronXL es una API de Excel para VB y C#. Con IronXL puedes leer, editar y crear archivos de hojas de cálculo Excel en .NET.
NPOI | IronXL |
---|---|
Cell Ranges | Cell Ranges |
Cell styling (Border, Color, Fill, Font, Number, Alignments) | Cell visual styles Font, Size, Background pattern, Border, Alignment and Number formats. |
Formula calculation | Formulas |
Data Validation | Data Validation |
Conditional formatting | Conditional formatting |
Images | Images |
Charts | Charts |
Tabla 1 - Comparación de características
Puede instalar ambas bibliotecas descargándolas manualmente, a través de NuGet o con el gestor de paquetes NuGet de Visual Studio. He aquí un breve resumen.
Para instalar NPOI a través de NuGet, abra el símbolo del sistema del desarrollador de Visual Studio e introduzca lo siguiente:
Figura 1 - Instalación de NuGet NPOI
Utilice los siguientes pasos para instalar IronXL o NPOI a través del gestor de paquetes NuGet en Visual Studio:
Figura 2 - Administrador de paquetes NuGet para NPOI
Para descargar IronXL, navegue a la siguiente URL y haga clic en el botón "Descargar".
Figura 3 - Descargar IronXL
Para instalar IronXL a través de NuGet, abra el símbolo del sistema del desarrollador de Visual Studio e introduzca lo siguiente:
Figura 4 - Instalación de NuGet IronXL
Utilice los siguientes pasos para instalar IronXL a través del gestor de paquetes NuGet en Visual Studio:
Figura 5 - Administrador de paquetes NuGet para IronXL
El siguiente código demuestra cómo leer un archivo Excel y mostrar su contenido con NPOI. Añade el siguiente código e incluye los espacios de nombres necesarios:
using NPOI.SS.UserModel;
using NPOI.XSSF.UserModel;
using NPOI.SS.UserModel;
using NPOI.XSSF.UserModel;
Imports NPOI.SS.UserModel
Imports NPOI.XSSF.UserModel
El siguiente código lee un archivo Excel existente y lo muestra dentro de una vista de cuadrícula de datos.
public void ReadExcelNPOI()
{
DataTable dtTable = new DataTable();
List<string> lstRows = new List<string>();
ISheet objWorksheet;
string strPath = @"c:\temp\NPOI_Test.XLSX";
using (var fStream = new FileStream(strPath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
{
fStream.Position = 0;
XSSFWorkbook objWorkbook = new XSSFWorkbook(fStream);
objWorksheet = objWorkbook.GetSheetAt(0);
IRow objHeader = objWorksheet.GetRow(0);
int countCells = objHeader.LastCellNum;
for (int j = 0; j < countCells; j++)
{
ICell objCell = objHeader.GetCell(j);
if (objCell == null
string.IsNullOrWhiteSpace(objCell.ToString())) continue;
{
dtTable.Columns.Add(objCell.ToString());
}
}
for (int i = (objWorksheet.FirstRowNum + 1); i <= objWorksheet.LastRowNum; i++)
{
IRow objRow = objWorksheet.GetRow(i);
if (objRow == null) continue;
if (objRow.Cells.All(d => d.CellType == CellType.Blank)) continue;
for (int j = objRow.FirstCellNum; j < countCells; j++)
{
if (objRow.GetCell(j) != null)
{
if (!string.IsNullOrEmpty(objRow.GetCell(j).ToString()) && !string.IsNullOrWhiteSpace(objRow.GetCell(j).ToString()))
{
lstRows.Add(objRow.GetCell(j).ToString());
}
}
}
if (lstRows.Count > 0)
dtTable.Rows.Add(lstRows.ToArray());
lstRows.Clear();
}
}
dataGridView1.DataSource = dtTable;
}
private void button1_Click(object sender, EventArgs e)
{
ReadExcelNPOI();
}
public void ReadExcelNPOI()
{
DataTable dtTable = new DataTable();
List<string> lstRows = new List<string>();
ISheet objWorksheet;
string strPath = @"c:\temp\NPOI_Test.XLSX";
using (var fStream = new FileStream(strPath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
{
fStream.Position = 0;
XSSFWorkbook objWorkbook = new XSSFWorkbook(fStream);
objWorksheet = objWorkbook.GetSheetAt(0);
IRow objHeader = objWorksheet.GetRow(0);
int countCells = objHeader.LastCellNum;
for (int j = 0; j < countCells; j++)
{
ICell objCell = objHeader.GetCell(j);
if (objCell == null
string.IsNullOrWhiteSpace(objCell.ToString())) continue;
{
dtTable.Columns.Add(objCell.ToString());
}
}
for (int i = (objWorksheet.FirstRowNum + 1); i <= objWorksheet.LastRowNum; i++)
{
IRow objRow = objWorksheet.GetRow(i);
if (objRow == null) continue;
if (objRow.Cells.All(d => d.CellType == CellType.Blank)) continue;
for (int j = objRow.FirstCellNum; j < countCells; j++)
{
if (objRow.GetCell(j) != null)
{
if (!string.IsNullOrEmpty(objRow.GetCell(j).ToString()) && !string.IsNullOrWhiteSpace(objRow.GetCell(j).ToString()))
{
lstRows.Add(objRow.GetCell(j).ToString());
}
}
}
if (lstRows.Count > 0)
dtTable.Rows.Add(lstRows.ToArray());
lstRows.Clear();
}
}
dataGridView1.DataSource = dtTable;
}
private void button1_Click(object sender, EventArgs e)
{
ReadExcelNPOI();
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
El siguiente código demuestra cómo leer un archivo de Excel y mostrarlo dentro de una vista de cuadrícula de datos con IronXL. Añade el siguiente código e incluye el namespace:
using IronXL;
using IronXL;
Imports IronXL
Fíjese en la inclusión de IronXL. Esto es necesario para que IronXL funcione. Añade las siguientes líneas:
private void button2_Click(object sender, EventArgs e)
{
string strPath = @"c:\temp\NPOI_Test.XLSX";
WorkBook workbook = WorkBook.Load(strPath);
WorkSheet sheet = workbook.DefaultWorkSheet;
var dtTable = sheet.ToDataTable(true);
dataGridView1.DataSource = dtTable;
}
private void button2_Click(object sender, EventArgs e)
{
string strPath = @"c:\temp\NPOI_Test.XLSX";
WorkBook workbook = WorkBook.Load(strPath);
WorkSheet sheet = workbook.DefaultWorkSheet;
var dtTable = sheet.ToDataTable(true);
dataGridView1.DataSource = dtTable;
}
Private Sub button2_Click(ByVal sender As Object, ByVal e As EventArgs)
Dim strPath As String = "c:\temp\NPOI_Test.XLSX"
Dim workbook As WorkBook = WorkBook.Load(strPath)
Dim sheet As WorkSheet = workbook.DefaultWorkSheet
Dim dtTable = sheet.ToDataTable(True)
dataGridView1.DataSource = dtTable
End Sub
Como puedes ver, todo esto supone mucho menos trabajo.
¿Por qué IronXL? Como ves, IronXL tiene una API fácil de usar, que mantiene tu código limpio. Bibliotecas que utilizan IronXL presumir de código limpio y legible es una inversión que vale la pena mediante la reducción de tiempo y esfuerzo necesarios para entender lo que el código permite que se cambie sin romper las cosas.
IronXL es más intuitivo en todos los sentidos y, al mismo tiempo, tan potente como NPOI. Y, por supuesto, con una clave de licencia tendrá acceso a la ventaja más importante del software de pago: obtendrá nuestro soporte profesional, programas de actualización coherentes y fiables, y la posibilidad de solicitar funciones a los agentes de soporte de Iron Software, que estarán encantados de ayudarle. Esto es algo que el código abierto no puede ofrecer.
Este proyecto está disponible en GitHub: Ejemplo de IronXL frente a NPOI