Porównanie IronXL i NPOI
Biblioteka IronXl.Excel i NPOI to biblioteki .NET dla programu Excel, które działają bez Office.Interop — nie wymagają instalacji programu Microsoft Excel. Niniejsze porównanie obejmuje interfejsy API służące do odczytu, zapisu i manipulacji plikami Excel, wraz z przykładami kodu dla operacji, z którymi programiści spotykają się najczęściej.
Jak korzystać z NPOI dla programu Excel w języku C#
- Zainstaluj bibliotekę C# do odczytu plików Excel za pomocą NPOI
- Utwórz instancję obiektu XSSFWorkbook w celu zapisania pliku Excel
- Pobierz konkretny arkusz za pomocą metody
GetSheetAt - Uzyskaj dostęp do każdego wiersza, przekazując indeks wiersza do metody
GetRow - Uzyskaj dostęp do każdej komórki w wierszu za pomocą metody
GetCell
Czym jest NPOI?
NPOI is the .NET version of the POI Java project at http://poi.apache.org/. POI to projekt open source, który może pomóc w odczytywaniu i zapisywaniu plików xls, doc i PPT. Ma szeroki zakres zastosowań.
Można go na przykład wykorzystać do:
- Generuj raporty w formacie Excel bez konieczności instalowania Suite Microsoft Office na serwerze, co jest bardziej wydajne niż wywoływanie ActiveX programu Microsoft Excel w tle
- Wyodrębnij tekst z dokumentów Office, aby wdrożyć funkcję indeksowania pełnotekstowego (w większości przypadków funkcja ta służy do tworzenia wyszukiwarek)
- Wyodrębnianie obrazów z dokumentów Office
- Generowanie arkuszy Excel zawierających formuły
NPOI i Excel
NPOI is a C# port of the POI Java project by Apache. Jest to oprogramowanie darmowe i open-source. Ponadto nie wymaga on Interop, co oznacza, że użytkownicy nie będą musieli mieć zainstalowanego programu Excel, aby aplikacja programisty mogła z nim współpracować.
IronXL i Excel
IronXL to interfejs API programu Excel dla języków VB i C#. Dzięki IronXL możesz odczytywać, edytować i tworzyć arkusze kalkulacyjne Excel w środowisku .NET.
Jak wypada porównanie NPOI i IronXL?
| NPOI | IronXL |
|---|---|
| Zakresy komórek | Zakresy komórek |
| Stylizacja komórek (obramowanie, kolor, wypełnienie, czcionka, numeracja, wyrównanie) | Style wizualne komórek: czcionka, rozmiar, wzór tła, obramowanie, wyrównanie i formaty liczb. |
| Obliczanie wzorów | Wzory |
| Walidacja danych | Walidacja danych |
| Formatowanie warunkówe | Formatowanie warunkówe |
| Obrazy | Obrazy |
| Wykresy | Wykresy |
Tabela 1 – Porównanie funkcji
Zespoły oceniające IronXL jako alternatywę dla NPOI mogą przetestować pełne API za pomocą bezpłatnej 30-dniowej wersji próbnej.
Instalacja IronXL i NPOI
Obie biblioteki można zainstalować, pobierając je ręcznie, za pośrednictwem NuGet lub za pomocą menedżera pakietów NuGet w programie Visual Studio. Oto krótki przegląd: Aby zapoznać się z instrukcją krok po kroku, zobacz przewodnik IronXL dla początkujących.
Instalacja NPOI
Instalacja NPOI za pomocą NuGet
Aby zainstalować NPOI za pomocą NuGet, otwórz wiersz poleceń programisty Visual Studio i wpisz następujące polecenie:
Install-Package NPOI -Version x.x.x
Rysunek 1 — Instalacja NuGet NPOI
Menedżer pakietów Visual Studio NuGet i NPOI
Aby zainstalować IronXL lub NPOI za pomocą menedżera pakietów NuGet w Visual Studio, wykonaj następujące kroki:
- Kliknij prawym przyciskiem myszy projekt w Eksploratorze rozwiązań
- Wybierz Zarządzaj pakietami NuGet
- Wybierz swój pakiet
- Kliknij Zainstaluj
Rysunek 2 — Menedżer pakietów NuGet dla NPOI
Instalacja IronXL
Pobieranie IronXL
To download IronXL, navigate to the following URL and click the "Download" button.
Rysunek 3 — Pobierz IronXL
Instalacja IronXL za pomocą NuGet
Aby zainstalować IronXL za pomocą NuGet, otwórz wiersz poleceń programisty Visual Studio i wpisz następujące polecenie:
Install-Package IronXl.Excel -Version x.x.x
Rysunek 4 — Instalacja NuGet IronXL
Menedżer pakietów Visual Studio NuGet i IronXL
Aby zainstalować IronXL za pomocą menedżera pakietów NuGet w Visual Studio, wykonaj następujące czynności:
- Kliknij prawym przyciskiem myszy projekt w Eksploratorze rozwiązań
- Wybierz Zarządzaj pakietami NuGet
- Wybierz swój pakiet
- Kliknij Zainstaluj
Rysunek 5 — Menedżer pakietów NuGet dla IronXL
Odczytywanie i zapisywanie plików Excel za pomocą NPOI i IronXL
Odczytywanie pliku Excel za pomocą NPOI
Poniższy kod pokazuje, jak odczytać plik Excel i wyświetlić jego zawartość za pomocą NPOI. Dodaj poniższy kod i dołącz niezbędne przestrzenie nazw:
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
Poniższy kod odczytuje istniejący plik Excel i wyświetla go w widoku siatki danych.
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
Odczytywanie pliku Excel za pomocą IronXL
Poniższy kod pokazuje, jak odczytać plik Excel i wyświetlić go w widoku siatki danych za pomocą IronXL. Więcej przykładów kodu IronXL można znaleźć w dokumentacji. Dodaj poniższy kod i dołącz przestrzeń nazw:
using IronXL;
using System.Data;
using IronXL;
using System.Data;
Imports IronXL
Imports System.Data
Zwróć uwagę na uwzględnienie IronXL. Jest to niezbędne do działania IronXL. Dodaj kilka następnych wierszy:
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
Jak widać, IronXL redukuje operację odczytu i wyświetlania do około 5 linii kodu w porównaniu z ponad 40 liniami w NPOI, całkowicie eliminując ręczną iterację wierszy i pętlę wyodrębniania komórek. Zapoznaj się z pełnym zestawem przewodników po funkcjach IronXL, aby poznać bardziej usprawnione podejścia do typowych zadań w programie Excel.
Którą bibliotekę wybrać?
NPOI zapewnia solidną, ugruntowaną platformę open source do manipulacji danymi programu Excel w środowisku .NET — jego dziedzictwo jako portu biblioteki Apache POI oznacza, że korzysta z wieloletniego wkładu społeczności oraz szerokiego zakresu obsługiwanych formatów. Dla zespołów, których głównym wymaganiem jest odczyt i zapis arkuszy kalkulacyjnych w darmowym pakiecie tworzonym przez społeczność, NPOI jest niezawodnym wyborem.
Częstym źródłem trudności dla zespołów jest ilość kodu szablonowego wymaganego przez NPOI do wykonywania typowych operacji. Jak ilustruje powyższy przykład odczytu pliku, podejście IronXL wymaga około 5 linii kodu w porównaniu z ponad 40 liniami NPOI dla tej samej operacji — ładowania skoroszytu i wyświetlania go w tabeli danych — całkowicie eliminując ręczną pętlę iteracji wierszy i komórek. To zmniejszenie powierzchni kodu to inwestycja, która się opłaca dzięki łatwiejszej konserwacji i mniejszej liczbie miejsc, w których mogą się ukrywać błędy.
IronXL oferuje również profesjonalne wsparcie, regularne aktualizacje oraz możliwość zgłaszania wniosków dotyczących nowych funkcji bezpośrednio do inżynierów Iron Software. Projekty społecznościowe oferują w tym zakresie różne kompromisy: szerszy wkład współpracowników, ale mniej przewidywalny czas reakcji na konkretne problemy.
Oprócz kosztów licencji, całkowity koszt projektu obejmuje godziny pracy programistów poświęcone na pisanie i utrzymywanie dodatkowego kodu szablonowego wymaganego przez API niższego poziomu NPOI, a także debugowanie ręcznej logiki mapowania danych pokazanej w powyższych przykładach. Dla zespołów oceniających koszty w perspektywie wieloletniego cyklu życia projektu koszty rozwoju i utrzymania często przewyższają różnicę między licencjami open source a komercyjnymi.
Pliki do pobrania
Projekt jest dostępny na GitHubie:
Chcesz zobaczyć różnicę w swoim projekcie? Rozpocznij bezpłatny 30-dniowy okres próbny IronXL, aby uruchomić te przykłady lokalnie.
Często Zadawane Pytania
Jaka jest alternatywa dla użycia Office.Interop do manipulacji plikami Excel w języku C#?
IronXL stanowi alternatywę dla korzystania z Office.Interop do manipulacji plikami Excel w języku C#. Zapewnia przyjazny dla użytkownika interfejs API, który pozwala programistom tworzyć, odczytywać i edytować pliki Excel bez konieczności instalowania pakietu Microsoft Office.
Jak mogę konwertować pliki Excel do formatu PDF w języku C#?
Możesz użyć IronXL do konwersji plików Excel do formatu PDF w języku C#, ładując skoroszyt Excel za pomocą metody WorkBook.Load, a następnie używając metody WorkBook.SaveAs do zapisania pliku w formacie PDF.
Jakie są główne zalety korzystania z IronXL do obróbki plików Excel?
IronXL oferuje bardziej intuicyjny interfejs API ułatwiający utrzymanie kodu, profesjonalne wsparcie, regularne aktualizacje oraz możliwość obsługi plików Excel bez zainstalowanego pakietu Microsoft Office, co czyni go doskonałym wyborem dla programistów.
Czy IronXL można zainstalować za pośrednictwem NuGet?
Tak, IronXL można zainstalować za pośrednictwem NuGet. Otwórz wiersz poleceń programisty Visual Studio i wpisz Install-Package IronXl.Excel -Version x.x.x.
Jakie typowe zadania związane z programem Excel można wykonać za pomocą IronXL?
Korzystając z IronXL, programiści mogą wykonywać takie zadania, jak odczytywanie i zapisywanie plików Excel, formatowanie komórek, stosowanie formuł, sprawdzanie poprawności danych, stosowanie formatowania warunkowego oraz praca z obrazami i wykresami.
Jak odczytać plik Excel w języku C# bez pakietu Microsoft Office?
Dzięki IronXL możesz odczytać plik Excel w języku C#, ładując skoroszyt za pomocą metody WorkBook.Load, uzyskując dostęp do arkusza i iterując po wierszach i komórkach przy użyciu prostych metod.
Dlaczego warto wybrać IronXL zamiast alternatywnych rozwiązań open source do obsługi arkuszy kalkulacyjnych Excel?
IronXL zapewnia bardziej przyjazny dla użytkownika interfejs API, profesjonalne wsparcie, regularne aktualizacje oraz możliwość zgłaszania nowych funkcji, co stanowi przewagę nad alternatywnymi rozwiązaniami open source, takimi jak NPOI.
Czym NPOI różni się od IronXL w zakresie manipulacji plikami Excel?
NPOI to biblioteka open source oparta na projekcie Apache POI, służąca do obsługi plików Excel bez pakietu Microsoft Office. Biblioteka IronXL oferuje jednak bardziej intuicyjny interfejs API, profesjonalne wsparcie techniczne i regularne aktualizacje, dzięki czemu nadaje się do zastosowań komercyjnych.
Jak wygląda proces konwersji arkusza Excel do tabeli danych (DataTable) przy użyciu IronXL?
Aby przekonwertować arkusz Excel na DataTable przy użyciu IronXL, należy załadować skoroszyt za pomocą WorkBook.Load, uzyskać dostęp do żądanego arkusza i użyć dostępnej metody, aby przekonwertować go na DataTable do dalszego wykorzystania.
W jaki sposób IronXL może usprawnić zarządzanie plikami Excel w aplikacjach .NET?
IronXL usprawnia zarządzanie plikami Excel w aplikacjach .NET, oferując przejrzysty i intuicyjny interfejs API, który ułatwia wykonywanie zadań, takich jak odczytywanie, edycja i tworzenie plików Excel, bez konieczności instalowania pakietu Microsoft Office.




