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.
Como Usar NPOI para Excel em C#
- Instalar biblioteca C# para ler Excel com NPOI
- Instanciar objeto XSSFWorkbook para armazenar arquivo Excel
- Obter a planilha específica com o método
GetSheetAt - Acessar cada linha passando o índice da linha para o método
GetRow - Acessar cada célula na linha com o método
GetCell
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
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
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.
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
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
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
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
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
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
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:
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.
[{i:(NPOI é 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.




