Przejdź do treści stopki
PORóWNAJ Z INNYMI KOMPONENTAMI
Porównanie NPOI i IronXL

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.

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

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

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.

Download IronXL

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

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

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

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

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

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

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:

Przykład: IronXL vs NPOI

Chcesz zobaczyć różnicę w swoim projekcie? Rozpocznij bezpłatny 30-dniowy okres próbny IronXL, aby uruchomić te przykłady lokalnie.

Zwróć uwagęNPOI jest zarejestrowanym znakiem towarowym odpowiedniego właściciela. Ta strona nie jest powiązana z NPOI, nie jest przez nią promowana ani sponsorowana. Wszystkie nazwy produktów, logo i marki są własnością ich odpowiednich właścicieli. Porównania mają charakter wyłącznie informacyjny i odzwierciedlają informacje dostępne publicznie w momencie pisania.

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.

Jordi Bardia
Inżynier oprogramowania
Jordi jest najbardziej biegły w Pythonie, C# i C++. Kiedy nie wykorzystuje swoich umiejętności w Iron Software, programuje gry. Dzieląc odpowiedzialność za testowanie produktów, rozwój produktów i badania, Jordi wnosi ogromną wartość do ciągłej poprawy produktów. Różnorodne doświadczenia ...
Czytaj więcej

Zespol wsparcia Iron

Jestesmy online 24 godziny, 5 dni w tygodniu.
Czat
Email
Zadzwon do mnie