Zum Fußzeileninhalt springen
MIT ANDEREN KOMPONENTEN VERGLEICHEN
Ein Vergleich von NPOI vs IronXL

Ein Vergleich von IronXL und NPOI

Wie Sie vielleicht wissen, ist Excel wahrscheinlich die am häufigsten verwendete Tabellenkalkulationsanwendung der Welt. Zu den Nutzern gehören sowohl Entwickler als auch die Allgemeinheit, aber es sind die Entwickler, die wahrscheinlich mehr an diesem Artikel interessiert sein werden. Anfangs gab es nicht viele Möglichkeiten für Entwickler, mit Excel in ihren verschiedenen Anwendungen zu arbeiten. Es gab jedoch VBA (Visual Basic for Applications) in der Office-Suite, mit denen Sie jedes Office-Produkt nach Ihren Bedürfnissen manipulieren konnten.

Entwickler verwendeten VBA in Excel, um ihre Interaktionen mit Excel und dessen Daten, sogar dessen visuelle Fähigkeiten, anzupassen. Aber irgendwann war das nicht mehr ausreichend. Entwickler wollten mehr, und so begannen sie, Office.Interop zu verwenden.

In diesem Artikel werde ich zwei sehr gute Excel-Bibliotheken vergleichen, die nicht auf Office.Interop angewiesen sind, um mit Excel zu arbeiten. Diese sind:

{"translation":"* IronXL"}

  • NPOI

Sie werden sehen und lernen, was jede Excel-Bibliothek leisten kann, und dann die beiden Bibliotheken anhand von Code-Beispielen und Schritt-für-Schritt-Anleitungen vergleichen. Obwohl dieser Artikel nicht alle Funktionen beider Excel-Bibliotheken abdecken kann, wird er die gebräuchlichsten und beliebtesten Einsatzmöglichkeiten jeder erläutern.

Was ist NPOI?

NPOI is the .NET version of the POI Java project at http://poi.apache.org/. POI ist ein Open-Source-Projekt, das Ihnen helfen kann, xls-, doc- und ppt-Dateien zu lesen/schreiben. Es hat ein breites Anwendungsspektrum.

Zum Beispiel können Sie es verwenden, um:

  • Einen Excel-Bericht zu erstellen, ohne dass die Microsoft Office-Suite auf Ihrem Server installiert ist und effizienter als der Aufruf von Microsoft Excel ActiveX im Hintergrund
  • Text aus Office-Dokumenten zu extrahieren, um Ihnen dabei zu helfen, eine Volltext-Indexierungsfunktion zu implementieren (diese Funktion wird oft verwendet, um Suchmaschinen zu erstellen)
  • Bilder aus Office-Dokumenten zu extrahieren
  • Excel-Tabellen mit Formeln zu generieren

NPOI und Excel

NPOI is a C# port of the POI Java project by Apache. Es ist kostenlos und Open-Source. Außerdem benötigt es kein Interop, was bedeutet, dass Benutzer Excel nicht installiert haben müssen, damit die Anwendung des Entwicklers damit arbeiten kann.

Sie können beide Bibliotheken manuell herunterladen, über NuGet installieren oder den NuGet-Paket-Manager in Visual Studio verwenden. IronXL ist eine Excel-API für VB und C#. Mit IronXL können Sie Excel-Tabellendateien in .NET lesen, bearbeiten und erstellen.

Gemeinsame Bibliotheksfunktionen für die NPOI- und IronXL-Excel-Bibliotheken

NPOI IronXL
Zellbereiche Zellbereiche
Zellgestaltung (Rahmen, Farbe, Füllung, Schriftart, Nummerierung, Ausrichtungen) Visuelle Stile für Zellen Schriftart, Größe, Hintergrundmuster, Rahmen, Ausrichtung und Zahlenformate.
Formelberechnung Formeln
Datenvalidierung Datenvalidierung
Bedingte Formatierung Bedingte Formatierung
Bilder Bilder
Diagramme Diagramme

Tabelle 1 - Funktionsvergleich


Installation von IronXL und NPOI

Sie können beide Bibliotheken herunterladen manuell, über NuGet oder mit dem NuGet-Paket-Manager in Visual Studio installieren. Hier ist ein kurzer Überblick.

NPOI-Installation

NPOI-Installation mit NuGet

Um NPOI über NuGet zu installieren, öffnen Sie die Visual Studio Entwickler-Befehlszeile und geben Sie folgendes ein:

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

Abbildung 1 - NuGet NPOI Installation

Visual Studio NuGet Paket-Manager und NPOI

Verwenden Sie die folgenden Schritte, um IronXL oder NPOI über den NuGet-Paket-Manager in Visual Studio zu installieren:

  • Rechtsklick auf das Projekt im Solution Explorer
  • Wählen Sie NuGet-Pakete verwalten
  • Suchen Sie nach Ihrem Paket
  • Klicken Sie auf Installieren
A screenshot of a computerDescription automatically generated

Abbildung 2 - NuGet-Paketmanager für NPOI

IronXL-Installation

Herunterladen von IronXL

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

Download IronXL

Abbildung 3 - IronXL herunterladen

Installieren von IronXL mit NuGet

Um IronXL über NuGet zu installieren, öffnen Sie die Entwickler-Eingabeaufforderung von Visual Studio und geben Sie Folgendes ein:

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

Abbildung 4 - NuGet IronXL Installation

Visual Studio NuGet Paket-Manager und IronXL

Verwenden Sie die folgenden Schritte, um IronXL über den NuGet-Paket-Manager in Visual Studio zu installieren:

  • Rechtsklick auf das Projekt im Solution Explorer
  • Wählen Sie NuGet-Pakete verwalten
  • Suchen Sie nach Ihrem Paket
  • Klicken Sie auf Installieren
A screenshot of a computerDescription automatically generated

Abbildung 5 - NuGet-Paketmanager für IronXL

Lesen aus und Schreiben in eine Excel-Datei mit NPOI und IronXL

Lesen einer Excel-Datei mit NPOI

Der folgende Code zeigt, wie man eine Excel-Datei liest und deren Inhalt mit NPOI anzeigt. Fügen Sie den folgenden Code hinzu und schließen Sie die erforderlichen Namensräume ein:

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

Der folgende Code liest eine bestehende Excel-Datei und zeigt sie innerhalb einer Datenrasteransicht an.

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

Lesen einer Excel-Datei mit IronXL

Der folgende Code zeigt, wie man eine Excel-Datei liest und sie innerhalb einer Datenrasteransicht mit IronXL anzeigt. Fügen Sie den folgenden Code hinzu und schließen Sie den Namensraum ein:

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

Beachten Sie die Einbindung von IronXL. Dies ist notwendig, damit IronXL funktioniert. Fügen Sie die nächsten Zeilen hinzu:

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

Wie Sie sehen, ergeben all diese Schritte viel weniger Arbeit.

Abschluss

Also warum IronXL? Wie Sie sehen, hat IronXL eine einfach zu verwendende API, die Ihren Code sauber hält. Bibliotheken, die IronXL verwenden, verfügen über sauberen, lesbaren Code, der eine Investition ist, die sich auszahlt, indem die benötigte Zeit und der Aufwand, um zu verstehen, was der Code tut, verringert wird, sodass er ohne Fehler geändert werden kann.

IronXL ist rundum intuitiver und dabei genauso leistungsfähig wie NPOI. Und natürlich erhalten Sie mit einem Lizenzschlüssel Zugriff auf den wichtigsten Vorteil von kostenpflichtiger Software: Sie erhalten unseren professionellen Support, konsistente und zuverlässige Update-Zeitpläne und die Möglichkeit, Funktionen von Iron Software-Supportmitarbeitern anzufordern, die Ihnen gerne helfen. Dies ist etwas, das Open Source einfach nicht bieten kann.

Downloads

Dieses Projekt ist auf GitHub verfügbar:

IronXL vs. NPOI Beispiel

Hinweis:NPOI ist eine eingetragene Marke des jeweiligen Eigentümers. Diese Seite ist weder verbunden mit, noch genehmigt oder gesponsert von NPOI. Alle Produktnamen, Logos und Marken sind Eigentum ihrer jeweiligen Eigentümer. Die Vergleiche dienen nur zu Informationszwecken und spiegeln öffentlich verfügbare Informationen zum Zeitpunkt des Schreibens wider.

Häufig gestellte Fragen

Was ist eine Alternative zur Verwendung von Office.Interop für die Excel-Bearbeitung in C#?

IronXL ist eine Alternative zur Verwendung von Office.Interop für die Excel-Bearbeitung in C#. Es bietet eine benutzerfreundliche API, die es Entwicklern ermöglicht, Excel-Dateien zu erstellen, zu lesen und zu bearbeiten, ohne dass Microsoft Office installiert sein muss.

Wie kann ich Excel-Dateien in PDF in C# konvertieren?

Sie können IronXL verwenden, um Excel-Dateien in C# in PDF zu konvertieren, indem Sie das Excel-Workbook mit WorkBook.Load laden und dann die WorkBook.SaveAs-Methode verwenden, um die Datei im PDF-Format zu speichern.

Was sind die wichtigsten Vorteile der Verwendung von IronXL für die Bearbeitung von Excel-Dateien?

IronXL bietet eine intuitivere API für eine einfachere Code-Wartung, professionellen Support, regelmäßige Updates und die Fähigkeit, Excel-Dateien ohne Microsoft Office zu verwalten, was es zu einer starken Wahl für Entwickler macht.

Kann IronXL über NuGet installiert werden?

Ja, IronXL kann über NuGet installiert werden. Öffnen Sie den Visual Studio Entwickler-Befehlsprompt und geben Sie Install-Package IronXL.Excel -Version x.x.x ein.

Was sind einige gängige Excel-bezogene Aufgaben, die mit IronXL durchgeführt werden können?

Mit IronXL können Entwickler Aufgaben wie das Lesen und Schreiben von Excel-Dateien, das Formatieren von Zellen, die Verwendung von Formeln, die Validierung von Daten, das Anwenden von bedingter Formatierung und die Arbeit mit Bildern und Diagrammen durchführen.

Wie lese ich eine Excel-Datei in C# ohne Microsoft Office?

Mit IronXL können Sie eine Excel-Datei in C# lesen, indem Sie das Workbook mit WorkBook.Load laden, auf das Arbeitsblatt zugreifen und mit einfachen Methoden durch die Zeilen und Zellen iterieren.

Warum IronXL gegenüber Open-Source-Alternativen für die Excel-Bearbeitung wählen?

IronXL bietet eine benutzerfreundlichere API, professionellen Support, regelmäßige Updates und laufende Funktionsanfragen, was Vorteile gegenüber Open-Source-Alternativen wie NPOI darstellt.

Wie unterscheidet sich NPOI von IronXL bei der Manipulation von Excel-Dateien?

NPOI ist eine Open-Source-Bibliothek, die auf dem Apache POI-Projekt basiert, um Excel-Dateien ohne Microsoft Office zu bearbeiten. IronXL bietet jedoch eine intuitivere API, professionellen Support und regelmäßige Updates und ist damit für kommerzielle Anwendungen geeignet.

Wie ist der Prozess zur Umwandlung eines Excel-Arbeitsblatts in eine DataTable mit IronXL?

Um ein Excel-Arbeitsblatt mit IronXL in eine DataTable umzuwandeln, laden Sie die Arbeitsmappe mit WorkBook.Load, greifen auf das gewünschte Arbeitsblatt zu und verwenden Sie die verfügbare Methode, um es in eine DataTable für die weitere Verwendung zu konvertieren.

Wie kann IronXL das Management von Excel-Dateien in .NET-Anwendungen verbessern?

IronXL verbessert das Management von Excel-Dateien in .NET-Anwendungen, indem es eine klare und intuitive API bietet, die Aufgaben wie das Lesen, Bearbeiten und Erstellen von Excel-Dateien erleichtert, ohne auf Microsoft Office-Installationen angewiesen zu sein.

Jordi Bardia
Software Ingenieur
Jordi ist am besten in Python, C# und C++ versiert. Wenn er nicht bei Iron Software seine Fähigkeiten einsetzt, programmiert er Spiele. Mit Verantwortung für Produkttests, Produktentwicklung und -forschung trägt Jordi mit immensem Wert zur kontinuierlichen Produktverbesserung bei. Die abwechslungsreiche Erfahrung hält ihn gefordert und engagiert, ...
Weiterlesen