Saltar al pie de página
COMPARAR CON OTROS COMPONENTES
Una Comparación de NPOI vs IronXL

Una comparación de IronXL y NPOI

Como quizás sepas, Excel es probablemente la aplicación de hojas de cálculo más usada en el mundo. Los usuarios incluyen tanto a desarrolladores como a la población en general, pero son los desarrolladores quienes probablemente estarán más interesados en este artículo. Inicialmente, no había muchas opciones para que los desarrolladores trabajaran con Excel en sus diversas aplicaciones. Sin embargo, había VBA (Visual Basic para Aplicaciones) integrado en el Office Suite con el cual podías manipular cualquier producto de Office según tus necesidades.

Los desarrolladores usaban VBA en Excel para personalizar sus interacciones con Excel y sus datos, incluso sus capacidades visuales. Pero, eventualmente esto no fue suficiente. Los desarrolladores querían más, y entonces comenzaron a usar Office.Interop.

En este artículo, compararé dos muy buenas bibliotecas de Excel que no dependen de Office.Interop para trabajar con Excel. Son:

  • IronXL
  • NPOI

Verás y aprenderás lo que cada biblioteca de Excel puede hacer, y luego compararás ambas a través de 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.

¿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.

Características comunes de la biblioteca para las bibliotecas NPOI y IronXL de Excel

NPOIIronXL
Rangos de CeldasRangos 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 de número.
Cálculo de fórmulasFórmulas
Validación de datosValidación de datos
Formato condicionalFormato condicional
ImágenesImágenes
GráficosGráficos

Tabla 1 - Comparación de características


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. Aquí hay una breve descripción general.

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
Graphical user interfaceDescription automatically generated

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
A screenshot of a computerDescription automatically generated

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.

Download IronXL

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
NuGet IronXL Installation

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
A screenshot of a computerDescription automatically generated

Figura 5 - Administrador de paquetes NuGet para IronXL

Lectura y escritura en un archivo Excel con NPOI y 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
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

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. 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
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

Como puedes ver, todo esto suma mucho menos trabajo.

Conclusión

Entonces, ¿por qué IronXL? Como ves, IronXL tiene una API fácil de usar, que mantiene tu código limpio. Las bibliotecas que usan IronXL presumen de un código limpio y legible, lo que es una inversión que rinde al reducir el tiempo y esfuerzo necesarios para entender lo que hace el código, permitiendo que se modifique sin romper las cosas.

IronXL es más intuitivo en general, a la vez que tan poderoso como NPOI. Y, por supuesto, con una clave de licencia obtienes acceso a la ventaja más importante del software de pago: obtienes nuestro soporte profesional, horarios de actualización consistentes y confiables, y la capacidad de solicitar funciones de los agentes de soporte de Iron Software que están encantados de ayudarte. Esto es algo que el código abierto simplemente no puede proporcionar.

Descargas

Este proyecto está disponible en GitHub:

Ejemplo de IronXL vs. NPOI

Por favor notaNPOI es una marca registrada de su respectivo propietario. Este sitio no está afiliado, patrocinado ni respaldado por NPOI. Todos los nombres de producto, logotipos y marcas son propiedad de sus respectivos dueños. Las comparaciones son sólo para fines informativos y reflejan información disponible públicamente al momento de escribir.

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.

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