Ir para o conteúdo do rodapé
COMPARAR COM OUTROS COMPONENTES
Comparação entre NPOI e IronXL

Comparação entre IronXL e NPOI

IronXL e NPOI são bibliotecas .NET para Excel que funcionam sem o Office.Interop — não é necessária a instalação do Microsoft Excel. Esta comparação abrange suas APIs para leitura, gravação e manipulação de arquivos Excel, com exemplos de código para as operações que os desenvolvedores encontram com mais frequência.

O que é NPOI?

NPOI is the .NET version of the POI Java project at http://poi.apache.org/. POI é um projeto de código aberto que pode ajudá-lo a ler/escrever arquivos xls, doc, ppt. Ele tem uma ampla gama de aplicações.

Por exemplo, você pode usá-lo para:

  • Gerar um relatório do Excel sem a suíte Microsoft Office instalada no seu servidor e mais eficiente do que chamar Microsoft Excel ActiveX em segundo plano
  • Extrair texto de documentos do Office para ajudá-lo a implementar um recurso de indexação de texto completo (na maioria das vezes esse recurso é usado para criar motores de busca)
  • Extrair imagens de documentos do Office
  • Gere planilhas do Excel que contenham fórmulas

NPOI e Excel

NPOI is a C# port of the POI Java project by Apache. É gratuito e de código aberto. Além disso, ele não precisa de Interop, o que significa que os usuários não precisarão ter o Excel instalado para que o aplicativo do desenvolvedor funcione com ele.

IronXL e Excel

IronXL é uma API Excel para VB e C#. Com o IronXL você pode ler, editar e criar arquivos de planilhas Excel no .NET.

Como se comparam NPOI e IronXL ?

NPOI IronXL
Intervalos de células Intervalos de células
Estilo de célula (Borda, Cor, Preenchimento, Fonte, Número, Alinhamentos) Estilos visuais da célula: Fonte, Tamanho, Padrão de fundo, Borda, Alinhamento e Formatos de número.
Cálculo da fórmula Fórmulas
Validação de dados Validação de dados
Formatação condicional Formatação condicional
Imagens Imagens
Gráficos Gráficos

**Tabela 1** - Comparação de Recursos

As equipes que avaliam o IronXL como uma alternativa ao NPOI podem testar a API completa com um período de avaliação gratuito de 30 dias .


Instalação do IronXL e NPOI

Você pode instalar ambas as bibliotecas baixando-as manualmente, via NuGet ou com o Gerenciador de Pacotes NuGet no Visual Studio. Segue um breve resumo; Para um passo a passo detalhado, consulte o guia de primeiros passos do IronXL .

Instalação do NPOI

Instalando o NPOI com NuGet

Para instalar o NPOI através do NuGet, abra o prompt de comando do desenvolvedor do Visual Studio e insira o seguinte:

Install-Package NPOI -Version x.x.x
Graphical user interfaceDescription automatically generated

**Figura 1** - Instalação do NPOI via NuGet

Gerenciador de Pacotes NuGet do Visual Studio e NPOI

Use as seguintes etapas para instalar o IronXL ou NPOI via o Gerenciador de Pacotes NuGet no Visual Studio:

  • Clique com o botão direito no projeto no Explorador de Soluções
  • Selecione Gerenciar Pacotes NuGet
  • Procure seu Pacote
  • Clique em Instalar
A screenshot of a computerDescription automatically generated

**Figura 2** - Gerenciador de Pacotes NuGet para NPOI

Instalação do IronXL

Baixando o IronXL

To download IronXL, navigate to the following URL and click the "Download" button.

Download IronXL

**Figura 3** - Baixar IronXL

Instalando o IronXL com NuGet

Para instalar o IronXL através do NuGet, abra o prompt de comando do desenvolvedor Visual Studio e insira o seguinte:

Install-Package IronXl.Excel -Version x.x.x
NuGet IronXL Installation

**Figura 4** - Instalação do IronXL via NuGet

Gerenciador de Pacotes NuGet do Visual Studio e IronXL

Use as seguintes etapas para instalar o IronXL via o Gerenciador de Pacotes NuGet no Visual Studio:

  • Clique com o botão direito no projeto no Explorador de Soluções
  • Selecione Gerenciar Pacotes NuGet
  • Procure seu Pacote
  • Clique em Instalar
A screenshot of a computerDescription automatically generated

**Figura 5** - Gerenciador de Pacotes NuGet para IronXL

Leitura e escrita em arquivos Excel com NPOI e IronXL

Lendo um arquivo Excel com NPOI

O código a seguir demonstra como ler um arquivo Excel e exibir seu conteúdo com NPOI. Adicione o seguinte código e inclua os namespaces necessários:

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

O código abaixo lê um arquivo Excel existente e o exibe dentro de uma visualização de grade de dados.

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

Lendo um arquivo Excel com IronXL

O seguinte código demonstra como ler um arquivo Excel e exibi-lo dentro de uma visualização de grade de dados com IronXL. Para mais exemplos de código IronXL , consulte a documentação. Adicione o seguinte código e inclua o namespace:

using IronXL;
using System.Data;
using IronXL;
using System.Data;
Imports IronXL
Imports System.Data
$vbLabelText   $csharpLabel

Observe a inclusão do IronXL. É necessário para que o IronXL funcione. Adicione as próximas linhas:

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 você pode ver, o IronXL reduz a operação de leitura e exibição para aproximadamente 5 linhas de código, em comparação com as mais de 40 do NPOI, eliminando completamente a iteração manual de linhas e o loop de extração célula por célula. Consulte o conjunto completo de guias de recursos do IronXL para obter abordagens mais simplificadas para tarefas comuns do Excel.

Qual biblioteca você deve escolher?

O NPOI oferece uma base sólida e bem estabelecida de código aberto para manipulação do Excel em .NET — sua herança como uma adaptação do Apache POI significa que ele se beneficia de anos de contribuições da comunidade e ampla cobertura de formatos. Para equipes cuja principal necessidade é ler e escrever planilhas em um pacote gratuito e desenvolvido pela comunidade, o NPOI é uma escolha confiável.

Onde as equipes frequentemente encontram atrito é na quantidade de código repetitivo que o NPOI exige para operações comuns. Como ilustra o exemplo de leitura de arquivo acima, a abordagem do IronXL requer aproximadamente 5 linhas de código, em comparação com as mais de 40 linhas do NPOI para a mesma operação — carregar uma planilha e exibi-la em uma grade de dados —, eliminando completamente o loop manual de iteração por linhas e células. Essa redução na área da superfície do código é um investimento que compensa através de uma manutenção mais fácil e menos lugares para os erros se esconderem.

O IronXL também inclui suporte Professional , cronogramas de atualização consistentes e a possibilidade de solicitar recursos diretamente aos engenheiros da Iron Software . Projetos conduzidos pela comunidade oferecem vantagens e desvantagens diferentes nesse aspecto: maior participação dos colaboradores, mas tempos de resposta menos previsíveis para problemas específicos.

Além do custo da licença, o custo total do projeto inclui as horas de desenvolvimento gastas na escrita e manutenção do código adicional que a API de baixo nível do NPOI exige, bem como na depuração da lógica de mapeamento de dados manual mostrada nos exemplos acima. Para equipes que avaliam custos ao longo do ciclo de vida de um projeto de vários anos, esses custos de desenvolvimento e manutenção frequentemente superam a diferença entre o licenciamento de código aberto e o licenciamento comercial.

Downloads

Este projeto está disponível no GitHub:

Exemplo IronXL vs NPOI

Pronto para ver a diferença no seu próprio projeto? Inicie um teste gratuito de 30 dias do IronXL para executar esses exemplos localmente.

ObserveNPOI é uma marca registrada de seu respectivo proprietário. Este site não é afiliado, endossado ou patrocinado pelo NPOI. Todos os nomes de produtos, logotipos e marcas são propriedade de seus respectivos proprietários. As comparações são apenas para fins informativos e refletem informações disponíveis publicamente no momento da redação.

Perguntas frequentes

Qual é uma alternativa ao uso de Office.Interop para manipulação de arquivos Excel em C#?

IronXL é uma alternativa ao uso do Office.Interop para manipulação de arquivos Excel em C#. Ele fornece uma API amigável que permite aos desenvolvedores criar, ler e editar arquivos Excel sem a necessidade de instalar o Microsoft Office.

Como posso converter arquivos do Excel para PDF em C#?

Você pode usar o IronXL para converter arquivos do Excel em PDF em C# carregando a planilha do Excel com WorkBook.Load e, em seguida, usando o método WorkBook.SaveAs para salvar o arquivo no formato PDF.

Quais são os principais benefícios de usar o IronXL para manipulação de arquivos do Excel?

O IronXL oferece uma API mais intuitiva para facilitar a manutenção do código, suporte profissional, atualizações regulares e a capacidade de lidar com arquivos do Excel sem a necessidade do Microsoft Office instalado, o que o torna uma excelente opção para desenvolvedores.

O IronXL pode ser instalado via NuGet?

Sim, o IronXL pode ser instalado via NuGet. Abra o prompt de comando do desenvolvedor do Visual Studio e digite Install-Package IronXL.Excel -Version xxx .

Quais são algumas tarefas comuns relacionadas ao Excel que podem ser realizadas usando o IronXL?

Com o IronXL, os desenvolvedores podem realizar tarefas como ler e gravar arquivos do Excel, formatar células, usar fórmulas, validar dados, aplicar formatação condicional e trabalhar com imagens e gráficos.

Como faço para ler um arquivo do Excel em C# sem o Microsoft Office?

Com o IronXL, você pode ler um arquivo Excel em C# carregando a pasta de trabalho usando WorkBook.Load , acessando a planilha e iterando pelas linhas e células usando métodos simples.

Por que escolher o IronXL em vez de alternativas de código aberto para manipulação do Excel?

O IronXL oferece uma API mais amigável, suporte profissional, atualizações regulares e solicitações de novos recursos em andamento, o que representa vantagens em relação a alternativas de código aberto como o NPOI.

Quais as diferenças entre o NPOI e o IronXL na manipulação de arquivos Excel?

NPOI é uma biblioteca de código aberto baseada no projeto Apache POI para manipulação de arquivos Excel sem o Microsoft Office. IronXL, por sua vez, oferece uma API mais intuitiva, suporte profissional e atualizações regulares, tornando-a adequada para aplicações comerciais.

Qual é o processo para converter uma planilha do Excel em uma DataTable usando o IronXL?

Para converter uma planilha do Excel em um DataTable usando o IronXL, carregue a pasta de trabalho com WorkBook.Load , acesse a planilha desejada e use o método disponível para convertê-la em um DataTable para uso posterior.

Como o IronXL pode aprimorar o gerenciamento de arquivos do Excel em aplicativos .NET?

O IronXL aprimora o gerenciamento de arquivos do Excel em aplicativos .NET, oferecendo uma API limpa e intuitiva, que facilita tarefas como leitura, edição e criação de arquivos do Excel com facilidade, sem depender de instalações do Microsoft Office.

Jordi Bardia
Engenheiro de Software
Jordi é extremamente proficiente em Python, C# e C++, e quando não está utilizando suas habilidades na Iron Software, dedica-se à programação de jogos. Compartilhando as responsabilidades por testes, desenvolvimento e pesquisa de produtos, Jordi agrega imenso valor à melhoria contínua dos produtos. Essa experiência diversificada o mantém ...
Leia mais

Equipe de suporte de ferro

Estamos online 24 horas por dia, 5 dias por semana.
Bater papo
E-mail
Liga para mim