Una comparación de IronXL y NPOI
IronXL y NPOI son bibliotecas IronXL y NPOI para .NET que funcionan sin Office.Interop, por lo que no es necesaria la instalación de Microsoft Excel. Esta comparación abarca sus API para leer, escribir y manipular archivos de Excel, con ejemplos de código para las operaciones con las que los desarrolladores se encuentran con mayor frecuencia.
Cómo usar NPOI para Excel en C#
- Instalar la biblioteca C# para leer Excel con NPOI
- Crear una instancia del objeto XSSFWorkbook para almacenar un archivo de Excel
- Obtenga una hoja de cálculo específica con el método
GetSheetAt - Acceda a cada fila pasando el índice de fila al método
GetRow - Acceda a cada celda de la fila con el método
GetCell
¿Qué es NPOI?
NPOI is the .NET version of the POI Java project at 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 usarlo para:
- Generar un informe de Excel sin la suite Microsoft Office instalada en tu servidor y más eficiente que llamar a Microsoft Excel ActiveX en segundo plano
- Extraer texto de documentos de Office para ayudarte a implementar una función de indexación de texto completo (la mayoría de las veces esta característica se utiliza para crear motores de búsqueda)
- Extraer imágenes de documentos de Office
- Generar hojas de Excel que contengan fórmulas
NPOI y Excel
NPOI is a C# port of the POI Java project by 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 y Excel
IronXL es una API de Excel para VB y C#. Con IronXL puedes leer, editar y crear archivos de hojas de cálculo de Excel en .NET.
¿En qué se diferencian NPOI e IronXL?
| NPOI | IronXL |
|---|---|
| Rangos de Celdas | Rangos de Celdas |
| Estilo de celda (borde, color, relleno, fuente, número, alineaciones) | Estilos visuales de celda: Fuente, Tamaño, Patrón de fondo, Borde, Alineación y Formatos numéricos. |
| Cálculo de fórmulas | Fórmulas |
| Validación de datos | Validación de datos |
| Formato condicional | Formato condicional |
| Imágenes | Imágenes |
| Gráficos | Gráficos |
Tabla 1 - Comparación de características
Los equipos que evalúen IronXL como alternativa a NPOI pueden probar la API completa con una prueba gratuita de 30 días.
Instalación de IronXL y NPOI
Puedes instalar ambas bibliotecas descargándolas manualmente, vía NuGet, o con el Administrador de Paquetes de NuGet en Visual Studio. A continuación, se ofrece una breve descripción general: Para obtener instrucciones paso a paso, consulte la guía de inicio rápido de IronXL .
Instalación de NPOI
Instalación de NPOI con NuGet
Para instalar NPOI a través de NuGet, abre el símbolo del sistema de desarrolladores de Visual Studio y escribe lo siguiente:
Install-Package NPOI -Version x.x.x
Figura 1 - Instalación de NuGet NPOI
Administrador de paquetes NuGet de Visual Studio y NPOI
Usa los siguientes pasos para instalar IronXL o NPOI a través del Administrador de Paquetes de NuGet en Visual Studio:
- Haz clic derecho en el proyecto en el Explorador de Soluciones
- Selecciona Administrar Paquetes NuGet
- Busca tu Paquete
- Haz clic en Instalar
Figura 2 - Administrador de paquetes NuGet para NPOI
Instalación de IronXL
Descargando IronXL
To download IronXL, navigate to the following URL and click the "Download" button.
Figura 3 - Descargar IronXL
Instalación de IronXL con NuGet
Para instalar IronXL a través de NuGet, abra el símbolo del sistema de desarrollador de Visual Studio e ingrese lo siguiente:
Install-Package IronXL.Excel -Version x.x.x
Figura 4 - Instalación de NuGet IronXL
Administrador de paquetes NuGet de Visual Studio e IronXL
Usa los siguientes pasos para instalar IronXL a través del Administrador de Paquetes de NuGet en Visual Studio:
- Haz clic derecho en el proyecto en el Explorador de Soluciones
- Selecciona Administrar Paquetes NuGet
- Busca tu Paquete
- Haz clic en Instalar
Figura 5 - Administrador de paquetes NuGet para IronXL
Lectura y escritura en un archivo de Excel con NPOI e IronXL
Lectura de un archivo Excel con NPOI
El siguiente código demuestra cómo leer un archivo de Excel y mostrar su contenido con NPOI. Agrega el siguiente código e incluye los espacios de nombres necesarios:
using NPOI.SS.UserModel;
using NPOI.XSSF.UserModel;
using System.Data;
using System.IO;
using System.Collections.Generic;
using NPOI.SS.UserModel;
using NPOI.XSSF.UserModel;
using System.Data;
using System.IO;
using System.Collections.Generic;
Imports NPOI.SS.UserModel
Imports NPOI.XSSF.UserModel
Imports System.Data
Imports System.IO
Imports System.Collections.Generic
El código siguiente lee un archivo de 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";
// Use FileStream to open the Excel file
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;
// Add columns to the DataTable based on the header row of Excel
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());
}
}
// Add rows to the DataTable, looping through each row and cell
for (int i = (objWorksheet.FirstRowNum + 1); i <= objWorksheet.LastRowNum; i++)
{
IRow objRow = objWorksheet.GetRow(i);
if (objRow == null || objRow.Cells.All(d => d.CellType == CellType.Blank)) continue;
for (int j = objRow.FirstCellNum; j < countCells; j++)
{
ICell cell = objRow.GetCell(j);
if (cell != null && !string.IsNullOrEmpty(cell.ToString()) && !string.IsNullOrWhiteSpace(cell.ToString()))
{
lstRows.Add(cell.ToString());
}
}
if (lstRows.Count > 0)
dtTable.Rows.Add(lstRows.ToArray());
lstRows.Clear();
}
}
// Assuming dataGridView1 is a DataGridView control on a Form
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";
// Use FileStream to open the Excel file
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;
// Add columns to the DataTable based on the header row of Excel
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());
}
}
// Add rows to the DataTable, looping through each row and cell
for (int i = (objWorksheet.FirstRowNum + 1); i <= objWorksheet.LastRowNum; i++)
{
IRow objRow = objWorksheet.GetRow(i);
if (objRow == null || objRow.Cells.All(d => d.CellType == CellType.Blank)) continue;
for (int j = objRow.FirstCellNum; j < countCells; j++)
{
ICell cell = objRow.GetCell(j);
if (cell != null && !string.IsNullOrEmpty(cell.ToString()) && !string.IsNullOrWhiteSpace(cell.ToString()))
{
lstRows.Add(cell.ToString());
}
}
if (lstRows.Count > 0)
dtTable.Rows.Add(lstRows.ToArray());
lstRows.Clear();
}
}
// Assuming dataGridView1 is a DataGridView control on a Form
dataGridView1.DataSource = dtTable;
}
private void button1_Click(object sender, EventArgs e)
{
ReadExcelNPOI();
}
Public Sub ReadExcelNPOI()
Dim dtTable As New DataTable()
Dim lstRows As New List(Of String)()
Dim objWorksheet As ISheet
Dim strPath As String = "c:\temp\NPOI_Test.XLSX"
' Use FileStream to open the Excel file
Using fStream = New FileStream(strPath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)
fStream.Position = 0
Dim objWorkbook As New XSSFWorkbook(fStream)
objWorksheet = objWorkbook.GetSheetAt(0)
Dim objHeader As IRow = objWorksheet.GetRow(0)
Dim countCells As Integer = objHeader.LastCellNum
' Add columns to the DataTable based on the header row of Excel
For j As Integer = 0 To countCells - 1
Dim objCell As ICell = objHeader.GetCell(j)
If objCell Is Nothing OrElse String.IsNullOrWhiteSpace(DirectCast(objCell, Object).ToString()) Then
Continue For
End If
If True Then
dtTable.Columns.Add(DirectCast(objCell, Object).ToString())
End If
Next j
' Add rows to the DataTable, looping through each row and cell
For i As Integer = (objWorksheet.FirstRowNum + 1) To objWorksheet.LastRowNum
Dim objRow As IRow = objWorksheet.GetRow(i)
If objRow Is Nothing OrElse objRow.Cells.All(Function(d) d.CellType = CellType.Blank) Then
Continue For
End If
For j As Integer = objRow.FirstCellNum To countCells - 1
Dim cell As ICell = objRow.GetCell(j)
If cell IsNot Nothing AndAlso Not String.IsNullOrEmpty(DirectCast(cell, Object).ToString()) AndAlso Not String.IsNullOrWhiteSpace(DirectCast(cell, Object).ToString()) Then
lstRows.Add(DirectCast(cell, Object).ToString())
End If
Next j
If lstRows.Count > 0 Then
dtTable.Rows.Add(lstRows.ToArray())
End If
lstRows.Clear()
Next i
End Using
' Assuming dataGridView1 is a DataGridView control on a Form
dataGridView1.DataSource = dtTable
End Sub
Private Sub button1_Click(ByVal sender As Object, ByVal e As EventArgs)
ReadExcelNPOI()
End Sub
Lectura de un archivo Excel con IronXL
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. Para ver más ejemplos de código de IronXL, consulte la documentación. Agrega el siguiente código e incluye el espacio de nombres:
using IronXL;
using System.Data;
using IronXL;
using System.Data;
Imports IronXL
Imports System.Data
Observa 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)
{
// Load the Excel workbook
string strPath = @"c:\temp\NPOI_Test.XLSX";
WorkBook workbook = WorkBook.Load(strPath);
// Access the default worksheet
WorkSheet sheet = workbook.DefaultWorkSheet;
// Convert the worksheet to a DataTable
var dtTable = sheet.ToDataTable(true);
// Assuming dataGridView1 is a DataGridView control on a Form
dataGridView1.DataSource = dtTable;
}
private void button2_Click(object sender, EventArgs e)
{
// Load the Excel workbook
string strPath = @"c:\temp\NPOI_Test.XLSX";
WorkBook workbook = WorkBook.Load(strPath);
// Access the default worksheet
WorkSheet sheet = workbook.DefaultWorkSheet;
// Convert the worksheet to a DataTable
var dtTable = sheet.ToDataTable(true);
// Assuming dataGridView1 is a DataGridView control on a Form
dataGridView1.DataSource = dtTable;
}
Private Sub button2_Click(ByVal sender As Object, ByVal e As EventArgs)
' Load the Excel workbook
Dim strPath As String = "c:\temp\NPOI_Test.XLSX"
Dim workbook As WorkBook = WorkBook.Load(strPath)
' Access the default worksheet
Dim sheet As WorkSheet = workbook.DefaultWorkSheet
' Convert the worksheet to a DataTable
Dim dtTable = sheet.ToDataTable(True)
' Assuming dataGridView1 is a DataGridView control on a Form
dataGridView1.DataSource = dtTable
End Sub
Como puede ver, IronXL reduce la operación de lectura y visualización a unas 5 líneas de código, en comparación con las más de 40 de NPOI, eliminando por completo la iteración manual de filas y el bucle de extracción celda por celda. Explora el conjunto completo de guías de funciones de IronXL para conocer enfoques más optimizados de las tareas habituales de Excel.
¿Qué biblioteca elegir?
NPOI proporciona una base de código abierto sólida y bien establecida para la manipulación de Excel en .NET; su origen como adaptación de Apache POI significa que se beneficia de años de contribuciones de la comunidad y de una amplia cobertura de formatos. Para los equipos cuyo principal requisito es leer y escribir hojas de cálculo en un paquete gratuito impulsado por la comunidad, NPOI es una opción fiable.
Donde los equipos suelen encontrar dificultades es en la cantidad de código repetitivo que NPOI requiere para operaciones comunes. Como ilustra el ejemplo de lectura de archivos anterior, el enfoque de IronXL requiere aproximadamente 5 líneas de código frente a las más de 40 líneas de NPOI para la misma operación —cargar un libro de trabajo y mostrarlo en una cuadrícula de datos—, lo que elimina por completo el bucle de iteración manual de filas y celdas. Esa reducción de la superficie de código es una inversión que se amortiza gracias a un mantenimiento más sencillo y a que hay menos lugares donde puedan esconderse los errores.
IronXL también incluye asistencia profesional, calendarios de actualización regulares y la posibilidad de solicitar funciones directamente a los ingenieros de Iron Software. Los proyectos impulsados por la comunidad ofrecen diferentes ventajas e inconvenientes en este sentido: una mayor participación de los colaboradores, pero tiempos de respuesta menos predecibles para cuestiones específicas.
Más allá del coste de la licencia, el coste total del proyecto incluye las horas de desarrollo dedicadas a escribir y mantener el código repetitivo adicional que requiere la API de nivel inferior de NPOI, así como a depurar la lógica de mapeo de datos manual que se muestra en los ejemplos anteriores. Para los equipos que evalúan los costes a lo largo del ciclo de vida de un proyecto de varios años, estos costes de desarrollo y mantenimiento suelen superar la diferencia entre las licencias de código abierto y las comerciales.
Descargas
Este proyecto está disponible en GitHub:
¿Listo para ver la diferencia en tu propio proyecto? Inicie una prueba gratuita de 30 días de IronXL para ejecutar estos ejemplos localmente.
Preguntas Frecuentes
¿Cuál es una alternativa para usar Office.Interop para la manipulación de Excel en C#?
IronXL es una alternativa al uso de Office.Interop para la manipulación de Excel en C#. Proporciona una API fácil de usar que permite a los desarrolladores crear, leer y editar archivos de Excel sin necesidad de tener Microsoft Office instalado.
¿Cómo puedo convertir archivos Excel a PDF en C#?
Puedes usar IronXL para convertir archivos de Excel a PDF en C# cargando el libro de Excel con WorkBook.Load y luego usando el método WorkBook.SaveAs para guardar el archivo en formato PDF.
¿Cuáles son los beneficios clave de usar IronXL para la manipulación de archivos de Excel?
IronXL ofrece una API más intuitiva para un mantenimiento de código más fácil, soporte profesional, actualizaciones regulares y la capacidad de manejar archivos de Excel sin Microsoft Office instalado, lo que lo convierte en una opción fuerte para los desarrolladores.
¿Se puede instalar IronXL a través de NuGet?
Sí, IronXL se puede instalar a través de NuGet. Abre el símbolo del sistema de desarrollador de Visual Studio e introduce Install-Package IronXL.Excel -Version x.x.x.
¿Cuáles son algunas tareas comunes relacionadas con Excel que pueden realizarse utilizando IronXL?
Utilizando IronXL, los desarrolladores pueden realizar tareas como leer y escribir archivos de Excel, dar estilo a las celdas, usar fórmulas, validar datos, aplicar formato condicional y trabajar con imágenes y gráficos.
¿Cómo leo un archivo de Excel en C# sin Microsoft Office?
Con IronXL, puedes leer un archivo de Excel en C# cargando el libro usando WorkBook.Load, accediendo a la hoja de trabajo y recorriendo las filas y celdas mediante métodos sencillos.
¿Por qué elegir IronXL frente a alternativas de código abierto para la manipulación de Excel?
IronXL proporciona una API más fácil de usar, soporte profesional, actualizaciones regulares y atenciones constantes a solicitudes de características, que son ventajas sobre las alternativas de código abierto como NPOI.
¿En qué se diferencia NPOI de IronXL para la manipulación de archivos de Excel?
NPOI es una biblioteca de código abierto basada en el proyecto Apache POI para manejar archivos de Excel sin Microsoft Office. Sin embargo, IronXL ofrece una API más intuitiva, soporte profesional y actualizaciones regulares, lo que lo hace adecuado para aplicaciones comerciales.
¿Cuál es el proceso para convertir una hoja de trabajo de Excel a un DataTable usando IronXL?
Para convertir una hoja de trabajo de Excel a un DataTable usando IronXL, carga el libro con WorkBook.Load, accede a la hoja de trabajo deseada y usa el método disponible para convertirlo en DataTable para su uso posterior.
¿Cómo puede mejorar IronXL la gestión de archivos Excel en aplicaciones .NET?
IronXL mejora la gestión de archivos de Excel en aplicaciones .NET al ofrecer una API limpia e intuitiva, facilitando tareas como lectura, edición y creación de archivos de Excel de manera fácil, sin depender de instalaciones de Microsoft Office.




