Test in einer Live-Umgebung
Test in der Produktion ohne Wasserzeichen.
Funktioniert überall, wo Sie es brauchen.
Wie Sie vielleicht wissen, ist Excel die wahrscheinlich am häufigsten verwendete Tabellenkalkulationsanwendung der Welt. Zu den Nutzern gehören sowohl Entwickler als auch die allgemeine Bevölkerung, aber es sind die Entwickler, die sich wahrscheinlich mehr für diesen Artikel interessieren werden. Ursprünglich gab es nicht viele Möglichkeiten für Entwickler, mit Excel in ihren verschiedenen Anwendungen zu arbeiten. Allerdings gab es VBA (Visual Basic für Anwendungen) die in die Office-Suite integriert ist, mit der Sie jedes Office-Produkt nach Ihren Bedürfnissen bearbeiten können.
Entwickler verwendeten VBA in Excel, um ihre Interaktionen mit Excel und seinen Daten, sogar seine visuellen Fähigkeiten, anzupassen. Aber irgendwann war das nicht mehr genug. Die Entwickler wollten mehr, und so begannen sie mit Office.Interop.
In diesem Artikel werde ich zwei sehr gute Excel-Bibliotheken vergleichen, die nicht auf Office.Interop angewiesen sind, um mit Excel zu arbeiten. Sie sind:
NPOI
Sie werden sehen und lernen, was die einzelnen Excel-Bibliotheken können, und dann die beiden anhand von Codebeispielen und Schritt-für-Schritt-Tutorials vergleichen. In diesem Artikel können zwar nicht alle Funktionen beider Excel-Bibliotheken behandelt werden, aber es werden die gängigsten und beliebtesten Verwendungszwecke der beiden Bibliotheken erläutert.
GetSheetAt
methodeeeGetRow
methodeeeGetCell
methodeeeNPOI ist die .NET-Version des POI-Java-Projekts unter http://poi.apache.org/. POI ist ein Open-Source-Projekt, mit dem Sie xls-, doc- und ppt-Dateien lesen und schreiben können. Es hat eine breite Palette von Anwendungen.
Sie können es zum Beispiel verwenden, um:
NPOI ist eine C#-Portierung des POI Java projekt von Apache. Es ist kostenlos und quelloffen. Außerdem ist kein Interop erforderlich, d. h., die Benutzer müssen Excel nicht installiert haben, damit die Anwendung des Entwicklers damit funktioniert.
IronXL ist eine Excel-API für VB und C#. Mit IronXL können Sie Excel-Tabellendateien in .NET lesen, bearbeiten und erstellen.
NPOI | IronXL |
---|---|
Zellbereiche | Zellbereiche |
Zellengestaltung (Rahmen, Farbe, Füllung, Schriftart, Nummerierung, Ausrichtungen) | Visuelle Stile für Zellen Schriftart, Größe, Hintergrundmuster, Rahmen, Ausrichtung und Zahlenformate. |
Berechnung der Formel | Formeln |
Validierung von Daten | Validierung von Daten |
Bedingte Formatierung | Bedingte Formatierung |
Bilder | Bilder |
Diagramme | Diagramme |
Sie können beide Bibliotheken durch manuelles Herunterladen, über NuGet oder mit dem NuGet Package Manager in Visual Studio installieren. Hier ist ein kurzer Überblick.
Um NPOI über NuGet zu installieren, öffnen Sie die Eingabeaufforderung von Visual Studio Developer und geben Sie Folgendes ein:
Führen Sie die folgenden Schritte aus, um IronXL oder NPOI über den NuGet Package Manager in Visual Studio zu installieren:
Um IronXL herunterzuladen, navigieren Sie zu folgendem Link URL und klicken Sie auf die Schaltfläche "Herunterladen".
Um IronXL über NuGet zu installieren, öffnen Sie die Eingabeaufforderung von Visual Studio Developer und geben Sie Folgendes ein:
Führen Sie die folgenden Schritte aus, um IronXL über den NuGet Package Manager in Visual Studio zu installieren:
Der folgende Code zeigt, wie eine Excel-Datei gelesen und ihr Inhalt mit NPOI angezeigt werden kann. Fügen Sie den folgenden Code hinzu und schließen Sie die erforderlichen Namespaces ein:
using NPOI.SS.UserModel;
using NPOI.XSSF.UserModel;
using NPOI.SS.UserModel;
using NPOI.XSSF.UserModel;
Imports NPOI.SS.UserModel
Imports NPOI.XSSF.UserModel
Der folgende Code liest eine vorhandene Excel-Datei und zeigt sie in einer Datengitteransicht an.
public void ReadExcelNPOI()
{
DataTable dtTable = new DataTable();
List<string> lstRows = new List<string>();
ISheet objWorksheet;
string strPath = @"c:\temp\NPOI_Test.XLSX";
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;
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());
}
}
for (int i = (objWorksheet.FirstRowNum + 1); i <= objWorksheet.LastRowNum; i++)
{
IRow objRow = objWorksheet.GetRow(i);
if (objRow == null) continue;
if (objRow.Cells.All(d => d.CellType == CellType.Blank)) continue;
for (int j = objRow.FirstCellNum; j < countCells; j++)
{
if (objRow.GetCell(j) != null)
{
if (!string.IsNullOrEmpty(objRow.GetCell(j).ToString()) && !string.IsNullOrWhiteSpace(objRow.GetCell(j).ToString()))
{
lstRows.Add(objRow.GetCell(j).ToString());
}
}
}
if (lstRows.Count > 0)
dtTable.Rows.Add(lstRows.ToArray());
lstRows.Clear();
}
}
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";
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;
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());
}
}
for (int i = (objWorksheet.FirstRowNum + 1); i <= objWorksheet.LastRowNum; i++)
{
IRow objRow = objWorksheet.GetRow(i);
if (objRow == null) continue;
if (objRow.Cells.All(d => d.CellType == CellType.Blank)) continue;
for (int j = objRow.FirstCellNum; j < countCells; j++)
{
if (objRow.GetCell(j) != null)
{
if (!string.IsNullOrEmpty(objRow.GetCell(j).ToString()) && !string.IsNullOrWhiteSpace(objRow.GetCell(j).ToString()))
{
lstRows.Add(objRow.GetCell(j).ToString());
}
}
}
if (lstRows.Count > 0)
dtTable.Rows.Add(lstRows.ToArray());
lstRows.Clear();
}
}
dataGridView1.DataSource = dtTable;
}
private void button1_Click(object sender, EventArgs e)
{
ReadExcelNPOI();
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
Der folgende Code veranschaulicht, wie eine Excel-Datei gelesen und in einer Datengitteransicht mit IronXL angezeigt werden kann. Fügen Sie den folgenden Code hinzu und schließen Sie den Namespace ein:
using IronXL;
using IronXL;
Imports IronXL
Beachten Sie die Einbeziehung von IronXL. Dies ist notwendig, damit IronXL funktionieren kann. Fügen Sie die nächsten Zeilen hinzu:
private void button2_Click(object sender, EventArgs e)
{
string strPath = @"c:\temp\NPOI_Test.XLSX";
WorkBook workbook = WorkBook.Load(strPath);
WorkSheet sheet = workbook.DefaultWorkSheet;
var dtTable = sheet.ToDataTable(true);
dataGridView1.DataSource = dtTable;
}
private void button2_Click(object sender, EventArgs e)
{
string strPath = @"c:\temp\NPOI_Test.XLSX";
WorkBook workbook = WorkBook.Load(strPath);
WorkSheet sheet = workbook.DefaultWorkSheet;
var dtTable = sheet.ToDataTable(true);
dataGridView1.DataSource = dtTable;
}
Private Sub button2_Click(ByVal sender As Object, ByVal e As EventArgs)
Dim strPath As String = "c:\temp\NPOI_Test.XLSX"
Dim workbook As WorkBook = WorkBook.Load(strPath)
Dim sheet As WorkSheet = workbook.DefaultWorkSheet
Dim dtTable = sheet.ToDataTable(True)
dataGridView1.DataSource = dtTable
End Sub
Wie Sie sehen können, bedeutet das alles eine Menge weniger Arbeit.
Warum also IronXL? Wie Sie sehen, verfügt IronXL über eine einfach zu verwendende API, die Ihren Code sauber hält. Bibliotheken, die IronXL verwenden, rühmen sich eines sauberen, lesbaren Codes - eine Investition, die sich auszahlt, denn sie reduziert den Zeit- und Arbeitsaufwand, der nötig ist, um den Code zu verstehen, und ermöglicht es, ihn zu ändern, ohne etwas kaputt zu machen.
IronXL ist rundum intuitiver und dabei genauso leistungsfähig wie NPOI. Und natürlich erhalten Sie mit einem Lizenzschlüssel Zugang zu den wichtigsten Vorteilen einer kostenpflichtigen Software: Sie erhalten unseren professionellen Support, konsistente und zuverlässige Update-Pläne und die Möglichkeit, Funktionen von Iron Software-Support-Mitarbeitern anzufordern, die Ihnen gerne weiterhelfen. Das ist etwas, was Open Source einfach nicht bieten kann.
Dieses Projekt ist auf GitHub verfügbar: IronXL vs. NPOI Beispiel
9 .NET API-Produkte für Ihre Bürodokumente