Pruebas en un entorno real
Pruebe en producción sin marcas de agua.
Funciona donde lo necesites.
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 para aplicaciones) integrado en el paquete Office con el que podrá manipular cualquier producto Office según sus 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
métodoGetRow
métodoGetCell
métodoNPOI es la versión .NET del proyecto Java POI en http://poi.apache.org/. 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 una adaptación a C# del programa PDI Java 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 |
---|---|
Rangos de celdas | Rangos de celdas |
Estilo de las celdas (Borde, Color, Relleno, Fuente, Número, Alineaciones) | Estilos visuales de celda Formatos de fuente, tamaño, patrón de fondo, borde, alineación y número. |
Cálculo de la fórmula | Fórmulas |
Validación de datos | Validación de datos |
Formato condicional | Formato condicional |
Imágenes | Imágenes |
Gráficos | Gráficos |
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:
Utilice los siguientes pasos para instalar IronXL o NPOI a través del gestor de paquetes NuGet en Visual Studio:
Para descargar IronXL, vaya a la siguiente dirección URL y haga clic en el botón "Descargar".
Para instalar IronXL a través de NuGet, abra el símbolo del sistema del desarrollador de Visual Studio e introduzca lo siguiente:
Utilice los siguientes pasos para instalar IronXL a través del gestor de paquetes NuGet en Visual Studio:
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
9 productos API .NET para sus documentos de oficina