Test in einer Live-Umgebung
Test in der Produktion ohne Wasserzeichen.
Funktioniert überall, wo Sie es brauchen.
MS Office-Tools wie Word, Excel, PowerPoint usw. sind sehr beliebt und werden in allen Arten von Unternehmen eingesetzt. Die Erstellung von Berichtsdateien im Excel-Format ist eine Funktion, die viele Benutzer in ihren Softwareanwendungen benötigen, und es gibt jetzt eine definitive Möglichkeit, diese Funktion mit Hilfe der verschiedenen verfügbaren Bibliotheken in Softwareanwendungen zu integrieren.
In diesem Artikel werden wir besprechen und vergleichen, wie man mit Microsoft Excel-Dateien programmatisch in C# arbeiten kann, indem man die beiden beliebtesten Bibliotheken, IronXL und Microsoft Office Excel Interop, verwendet.
IronXL und Microsoft Excel Interop bieten beide die Methoden zum Erstellen, Bearbeiten und Lesen von Excel-Dokumenten in .NET-Frameworks. Die nächste Frage ist, welche C# Excel-Bibliothek am besten für Ihr Projekt geeignet ist. Dieser Artikel soll Ihnen helfen, die beste Option für Ihre Anwendungen zu finden.
Schauen wir uns zunächst an, was beide Bibliotheken zu bieten haben, und gehen wir dann zum eigentlichen Vergleich über.
IronXL ist eine .NET-Bibliothek, die das Lesen und Bearbeiten von Microsoft Excel-Dokumenten in C# erleichtert. IronXL.Excel ist eine eigenständige .NET-Softwarebibliothek zum Lesen einer breiten Palette von Tabellenkalkulationsformaten. Es erfordert weder die Installation von Microsoft Excel, noch ist es von Interop abhängig.
IronXL ist eine intuitive C#-API, die es Ihnen ermöglicht, Excel-Tabellendateien in .NET mit blitzschneller Leistung zu lesen, zu bearbeiten und zu erstellen. IronXL unterstützt vollständig .NET Core, .NET-Framework, Xamarin, Mobile, Linux, macOS und Azure.
IronXL ist eine führende .NET Core und .NET-Framework Excel-Tabellenbibliothek für C#.
Docs & Support
Der Microsoft.Office.Interop.Excel-Namespace bietet Methoden für die Interaktion mit der Microsoft Excel-Anwendung in C# und Visual Basic. Mit diesem Namensraum können wir neue Excel-Arbeitsmappen und Excel-Arbeitsblätter erstellen, Daten in vorhandenen Blättern anzeigen, den Inhalt vorhandener Excel-Blätter ändern und vieles mehr.
Die Klassen und Schnittstellen in Microsoft.Office.Interop.Excel bieten Unterstützung für die Interoperabilität zwischen dem COM-Objektmodell von Microsoft Excel-Dateien und verwalteten Anwendungen, die xls- oder xlsx-Dateien automatisieren.
Die Programmiersprache C# enthält Funktionen, die die Arbeit mit Microsoft Office Interop API-Objekten erleichtern. Zu den neuen Funktionen gehören benannte und optionale Argumente, ein neuer Typ namens dynamic und die Möglichkeit, Argumente an Referenzparameter in COM-Methoden zu übergeben, als wären es Wertparameter. Dies macht es zu einer besseren Wahl für die Arbeit mit COM- und Interop-Objekten.
Hinweis: Für Microsoft Excel Interop-Objekte muss Microsoft Excel auf dem Computer installiert sein
Der Rest des Artikels lautet wie folgt:
Erstellen einer Konsolenanwendung
IronXL C# Bibliothek Installation
Microsoft Office Interop Excel-Installation
Eine neue Excel-Arbeitsmappe und ein neues Blatt erstellen
Excel-Dateien lesen
Arbeiten mit Wertebereichen in Excel-Dateien
Arbeiten mit Excel-Formeln
Lizenzvergabe
Gehen Sie wie folgt vor, um eine Konsolenanwendung zu erstellen:
Geben Sie auf dem Bildschirm Zusätzliche Informationen die Framework-Version an, die Sie verwenden möchten. In diesem Beispiel wird .NET-Framework 4.8 verwendet.
Klicken Sie auf Erstellen, um den Vorgang abzuschließen.
Jetzt ist das Projekt erstellt und wir sind fast bereit, die Bibliotheken zu testen. Wir müssen sie jedoch noch installieren und in unser Projekt integrieren. Installieren wir zunächst IronXL.
Sie können die IronXL-Bibliothek mit den folgenden Methoden herunterladen und installieren:
Verwendung von Visual Studio mit NuGet-Paketen.
Laden Sie das NuGet-Paket direkt herunter.
Manuelle Installation mit der DLL.
Schauen wir uns jede einzelne davon genauer an.
Visual Studio bietet den NuGet Package Manager, um NuGet-Pakete in Ihren Projekten zu installieren. Sie können über das Projektmenü darauf zugreifen, oder indem Sie mit der rechten Maustaste auf Ihr Projekt im Projektmappen-Explorer klicken.
Suchen Sie nun auf der Registerkarte Durchsuchen -> IronXL.Excel -> Installieren
Eine andere Möglichkeit, Microsoft.Office.Interop.Excel C# Library herunterzuladen und zu installieren, ist die Verwendung der folgenden Schritte, um das NuGet-Paket über die Eingabeaufforderung für Entwickler zu installieren.
Öffnen Sie die Developer-Eingabeaufforderung, die sich normalerweise im Ordner Visual Studio befindet.
Geben Sie den folgenden Befehl ein:
pM> Install-Package Microsoft.Office.Interop.Excel
Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf die Datei Program.cs und dann auf Code anzeigen.
using Excel = Microsoft.Office.Interop.Excel;
using Excel = Microsoft.Office.Interop.Excel;
Imports Excel = Microsoft.Office.Interop.Excel
Eine Arbeitsmappe ist eine Excel-Datei mit mehreren Arbeitsblättern mit Zeilen und Spalten. Beide Bibliotheken bieten die Möglichkeit, eine neue Excel-Arbeitsmappe und Blätter zu erstellen. Schauen wir uns den Code Schritt für Schritt an.
Die Erstellung einer neuen Excel-Arbeitsmappe mit IronXL ist denkbar einfach! Nur eine Zeile Code! Ja, wirklich. Fügen Sie den folgenden Code zu Ihrer static void main-Funktion in der Datei Program.cs hinzu:
WorkBook workbook = WorkBook.Create(ExcelFileFormat.XLSX);
WorkBook workbook = WorkBook.Create(ExcelFileFormat.XLSX);
Dim workbook As WorkBook = WorkBook.Create(ExcelFileFormat.XLSX)
Beide XLS (ältere Excel-Datei-Version) und XLSX (aktuelle und neuere Dateiversion) dateiformate können mit IronXL erstellt werden.
Und es ist sogar noch einfacher, ein Standard-Arbeitsblatt zu erstellen:
var worksheet = workbook.CreateWorkSheet("IronXL Features");
var worksheet = workbook.CreateWorkSheet("IronXL Features");
Dim worksheet = workbook.CreateWorkSheet("IronXL Features")
Sie können nun die Arbeitsblattvariable verwenden, um Zellwerte zu setzen und fast alles zu tun, was eine Excel-Datei tun kann.
Um eine Excel-Datei mit Microsoft.Office.Interop erstellen zu können, muss Microsoft Excel installiert sein. Wir müssen also prüfen, ob Microsoft Excel auf dem Host-Rechner installiert ist - wenn nicht, wird einfach eine Ausnahme zurückgegeben, die behandelt werden muss. Mit den folgenden Codebeispielen können Sie prüfen, ob eine Excel-Anwendung installiert ist, und Excel-Arbeitsmappen und -Blätter erstellen:
Überprüfen Sie, ob Microsoft Excel installiert ist:
//Start Excel and get Application object.
Excel.Application xlApp = new Excel.Application();
//Checks if Excel is installed
if (xlApp == null)
{
Console.WriteLine("Excel is not installed in the system...");
return;
}
//Start Excel and get Application object.
Excel.Application xlApp = new Excel.Application();
//Checks if Excel is installed
if (xlApp == null)
{
Console.WriteLine("Excel is not installed in the system...");
return;
}
'Start Excel and get Application object.
Dim xlApp As New Excel.Application()
'Checks if Excel is installed
If xlApp Is Nothing Then
Console.WriteLine("Excel is not installed in the system...")
Return
End If
Arbeitsmappe und Arbeitsblatt erstellen:
//Create Workbook and Worksheet
object misValue = System.Reflection.Missing.Value;
Excel.Workbook xlWorkBook = xlApp.Workbooks.Add(misValue);
Excel.Worksheet xlWorkSheet = (Excel.Worksheet)xlWorkBook.Worksheets.get_Item(1);
//Create Workbook and Worksheet
object misValue = System.Reflection.Missing.Value;
Excel.Workbook xlWorkBook = xlApp.Workbooks.Add(misValue);
Excel.Worksheet xlWorkSheet = (Excel.Worksheet)xlWorkBook.Worksheets.get_Item(1);
'Create Workbook and Worksheet
Dim misValue As Object = System.Reflection.Missing.Value
Dim xlWorkBook As Excel.Workbook = xlApp.Workbooks.Add(misValue)
Dim xlWorkSheet As Excel.Worksheet = CType(xlWorkBook.Worksheets.Item(1), Excel.Worksheet)
Wenn man sich die beiden Codes ansieht, ist IronXL gegenüber Office Interop Excel im Vorteil. IronXL verwendet nur eine Zeile Code, um mit Excel-Dateien arbeiten zu können, ohne viel Aufhebens und zusätzliche Abhängigkeiten.
Beide Bibliotheken können vorhandene Excel-Dokumente öffnen und lesen. Werfen wir einen Blick auf den Beispielcode.
Die IronXL WorkBook-Klasse stellt eine Excel-Tabelle dar. Um eine Excel-Datei mit C# zu öffnen, verwenden wir WorkBook.Load und geben den Pfad der Excel-Datei an (.xlsx). Der folgende einzeilige Code wird verwendet, um die Datei zum Lesen zu öffnen:
//Load WorkBook
var workbook = WorkBook.Load(@"Spreadsheets\\sample.xlsx");
//Load WorkBook
var workbook = WorkBook.Load(@"Spreadsheets\\sample.xlsx");
'Load WorkBook
Dim workbook = WorkBook.Load("Spreadsheets\\sample.xlsx")
Jedes WorkBook kann mehrere WorkSheet-Objekte enthalten. Diese stellen Arbeitsblätter im Excel-Dokument dar. Wenn die Arbeitsmappe Arbeitsblätter enthält, rufen Sie diese wie folgt nach Namen auf:
//Open Sheet for reading
var worksheet = workbook.GetWorkSheet("sheetnamegoeshere");
//Open Sheet for reading
var worksheet = workbook.GetWorkSheet("sheetnamegoeshere");
'Open Sheet for reading
Dim worksheet = workbook.GetWorkSheet("sheetnamegoeshere")
Code zum Lesen der Zellwerte:
// Read from Ranges of cells elegantly.
foreach (var cell in worksheet ["A2:A10"])
{
Console.WriteLine("Cell {0} has value '{1}'", cell.AddressString, cell.Text);
}
// Read from Ranges of cells elegantly.
foreach (var cell in worksheet ["A2:A10"])
{
Console.WriteLine("Cell {0} has value '{1}'", cell.AddressString, cell.Text);
}
' Read from Ranges of cells elegantly.
For Each cell In worksheet ("A2:A10")
Console.WriteLine("Cell {0} has value '{1}'", cell.AddressString, cell.Text)
Next cell
Auch hier wird eine Zeile Code verwendet, um eine Arbeitsmappe und ein Blatt zu öffnen. Der Code lautet wie folgt:
Excel.Application xlApp = new Excel.Application();
//Load WorkBook
Excel.Workbook xlWorkBook = xlApp.Workbooks.Open(filePath);
//Open Sheet for reading
Excel.Worksheet xlWorkSheet = (Excel.Worksheet)xlWorkBook.Worksheets.get_Item(1);
Excel.Application xlApp = new Excel.Application();
//Load WorkBook
Excel.Workbook xlWorkBook = xlApp.Workbooks.Open(filePath);
//Open Sheet for reading
Excel.Worksheet xlWorkSheet = (Excel.Worksheet)xlWorkBook.Worksheets.get_Item(1);
Dim xlApp As New Excel.Application()
'Load WorkBook
Dim xlWorkBook As Excel.Workbook = xlApp.Workbooks.Open(filePath)
'Open Sheet for reading
Dim xlWorkSheet As Excel.Worksheet = CType(xlWorkBook.Worksheets.Item(1), Excel.Worksheet)
Code zum Lesen der Zellwerte:
//Get the entire range of cells
Excel.Range xlRange = xlWorkSheet.UsedRange;
//Reading first 10 rows of with two columns
for (int rowCount = 1; rowCount <= 10; rowCount++)
{
firstValue = Convert.ToString((xlRange.Cells [rowCount, 1] as Excel.Range).Text);
secondValue = Convert.ToString((xlRange.Cells [rowCount, 2] as Excel.Range).Text);
Console.WriteLine(firstValue + "\t" + secondValue);
}
//Get the entire range of cells
Excel.Range xlRange = xlWorkSheet.UsedRange;
//Reading first 10 rows of with two columns
for (int rowCount = 1; rowCount <= 10; rowCount++)
{
firstValue = Convert.ToString((xlRange.Cells [rowCount, 1] as Excel.Range).Text);
secondValue = Convert.ToString((xlRange.Cells [rowCount, 2] as Excel.Range).Text);
Console.WriteLine(firstValue + "\t" + secondValue);
}
Imports Microsoft.VisualBasic
'Get the entire range of cells
Dim xlRange As Excel.Range = xlWorkSheet.UsedRange
'Reading first 10 rows of with two columns
For rowCount As Integer = 1 To 10
firstValue = Convert.ToString((TryCast(xlRange.Cells (rowCount, 1), Excel.Range)).Text)
secondValue = Convert.ToString((TryCast(xlRange.Cells (rowCount, 2), Excel.Range)).Text)
Console.WriteLine(firstValue & vbTab & secondValue)
Next rowCount
Die Überprüfung der Excel-Installation und die Erstellung der Instanz sind jedoch ein wesentlicher Bestandteil.
In IronXL können wir mit einer Zeile Code den Wertebereich bestimmter Zellen abrufen. In einer Schleife kann dann jeder Zellwert gelesen oder bearbeitet werden. Der Code lautet wie folgt:
WorkBook workbook = WorkBook.Load("test.xls");
WorkSheet sheet = workbook.WorkSheets.First();
//This is how we get range from Excel worksheet
var range = sheet ["A2:A8"];
//This is how we can iterate over our range and read or edit any cell
foreach (var cell in range)
{
Console.WriteLine(cell.Value);
}
WorkBook workbook = WorkBook.Load("test.xls");
WorkSheet sheet = workbook.WorkSheets.First();
//This is how we get range from Excel worksheet
var range = sheet ["A2:A8"];
//This is how we can iterate over our range and read or edit any cell
foreach (var cell in range)
{
Console.WriteLine(cell.Value);
}
Dim workbook As WorkBook = WorkBook.Load("test.xls")
Dim sheet As WorkSheet = workbook.WorkSheets.First()
'This is how we get range from Excel worksheet
Dim range = sheet ("A2:A8")
'This is how we can iterate over our range and read or edit any cell
For Each cell In range
Console.WriteLine(cell.Value)
Next cell
Auch hier wird eine Zeile Code verwendet, um den Bereich der Zellwerte zu ermitteln. Die Zellen können dann mit den gewünschten Werten aktualisiert werden. Der Code lautet wie folgt:
Excel.Application xlApp = new Excel.Application();
Excel.Workbook xlWorkBook = xlApp.Workbooks.Open(filePath);
Excel.Worksheet xlWorkSheet = (Excel.Worksheet)xlWorkBook.Worksheets.get_Item(1);
//Get range of values and updating their format
var range = xlWorkSheet.get_Range("A1", "D1");
range.NumberFormat = "$0.00";
Excel.Application xlApp = new Excel.Application();
Excel.Workbook xlWorkBook = xlApp.Workbooks.Open(filePath);
Excel.Worksheet xlWorkSheet = (Excel.Worksheet)xlWorkBook.Worksheets.get_Item(1);
//Get range of values and updating their format
var range = xlWorkSheet.get_Range("A1", "D1");
range.NumberFormat = "$0.00";
Dim xlApp As New Excel.Application()
Dim xlWorkBook As Excel.Workbook = xlApp.Workbooks.Open(filePath)
Dim xlWorkSheet As Excel.Worksheet = CType(xlWorkBook.Worksheets.Item(1), Excel.Worksheet)
'Get range of values and updating their format
Dim range = xlWorkSheet.get_Range("A1", "D1")
range.NumberFormat = "$0.00"
Excel-Formeln sind der wichtigste Teil der Arbeit mit Excel-Dateien. Beide Bibliotheken bieten die Möglichkeit, mit Formeln zu arbeiten und sie problemlos auf Zellen anzuwenden.
Nach dem Laden der Arbeitsmappe und des Arbeitsblatts kann das folgende Codebeispiel verwendet werden, um entweder Änderungen an Formeln vorzunehmen oder auf bestimmte Zellen anzuwenden. Der Code lautet wie folgt:
// Set Formulas
worksheet ["A1"].Formula = "Sum(B8:C12)";
worksheet ["B8"].Formula = "=C9/C11";
worksheet ["G30"].Formula = "Max(C3:C7)";
// Force recalculate all formula values in all sheets.
workbook.EvaluateAll();
// Set Formulas
worksheet ["A1"].Formula = "Sum(B8:C12)";
worksheet ["B8"].Formula = "=C9/C11";
worksheet ["G30"].Formula = "Max(C3:C7)";
// Force recalculate all formula values in all sheets.
workbook.EvaluateAll();
' Set Formulas
worksheet ("A1").Formula = "Sum(B8:C12)"
worksheet ("B8").Formula = "=C9/C11"
worksheet ("G30").Formula = "Max(C3:C7)"
' Force recalculate all formula values in all sheets.
workbook.EvaluateAll()
Sie können auch Formeln und deren Werte abrufen.
// Get Formulas
// Get the formula's calculated value. e.g. "52"
string formulaValue = worksheet ["G30"].Value;
//Get the formula as a string. e.g. "Max(C3:C7)"
string formulaString = worksheet ["G30"].Formula;
//Save your changes with updated formulas and calculated values.
workbook.Save();
// Get Formulas
// Get the formula's calculated value. e.g. "52"
string formulaValue = worksheet ["G30"].Value;
//Get the formula as a string. e.g. "Max(C3:C7)"
string formulaString = worksheet ["G30"].Formula;
//Save your changes with updated formulas and calculated values.
workbook.Save();
' Get Formulas
' Get the formula's calculated value. e.g. "52"
Dim formulaValue As String = worksheet ("G30").Value
'Get the formula as a string. e.g. "Max(C3:C7)"
Dim formulaString As String = worksheet ("G30").Formula
'Save your changes with updated formulas and calculated values.
workbook.Save()
Nach dem Laden der Arbeitsmappe und des Arbeitsblatts kann der folgende Code verwendet werden, um mit Excel-Formeln zu arbeiten. Das Codebeispiel lautet wie folgt:
//Get range of values and updating their format
var range1 = xlWorkSheet.get_Range("A1", "D1");
var range2 = xlWorkSheet.get_Range("C2", "C6");
// Set Formula
range1.Formula = "=RAND()*100000";
range2.Formula = "=A2 & \" \" & B2";
//Get range of values and updating their format
var range1 = xlWorkSheet.get_Range("A1", "D1");
var range2 = xlWorkSheet.get_Range("C2", "C6");
// Set Formula
range1.Formula = "=RAND()*100000";
range2.Formula = "=A2 & \" \" & B2";
'Get range of values and updating their format
Dim range1 = xlWorkSheet.get_Range("A1", "D1")
Dim range2 = xlWorkSheet.get_Range("C2", "C6")
' Set Formula
range1.Formula = "=RAND()*100000"
range2.Formula = "=A2 & "" "" & B2"
IronXL ist eine offen kommerzielle C#-Excel-Bibliothek. Es ist kostenlos für die Entwicklung und kann jederzeit für den kommerziellen Einsatz lizenziert werden. Lizenzen sind verfügbar für Einzelprojekte, einzelne Entwickler, Agenturen und globale Unternehmen sowie für SaaS- und OEM-Vertrieb. Alle Lizenzen beinhalten eine 30-tägige Geld-zurück-Garantie, ein Jahr Produktsupport und Updates, Gültigkeit für Entwicklung/Taging/Produktion sowie eine permanente Lizenz (einmaliger Kauf). Das Lite-Paket beginnt mit $749.
Für Microsoft Office Interop Excel benötigen Anwendungen, die diese DLL-Datei verwenden, keine separate Lizenz, weder für den einmaligen noch für den kommerziellen Gebrauch. Damit eine Lösung mit einer Office-Anwendung arbeiten kann, müssen Microsoft Office-Anwendungen auf dem Rechner, auf dem die Lösung ausgeführt wird, installiert und lizenziert sein. Die DLL wird immer auf dem Rechner vorhanden sein, auf dem die Office-Anwendung installiert ist, und sie wird dort registriert. Gleichzeitig wird die primäre Interop-Baugruppe (PIAs) die für .NET-Lösungen mit "interop" erforderlich sind, werden ebenfalls im GAC installiert.
Zusammenfassung
Excel lesen und erstellen (XLS, XLSX und CSV) dateien in C# und allen anderen .NET-Sprachen ist mit der IronXL-Softwarebibliothek von Iron Software ganz einfach. IronXL erfordert nicht, dass Excel auf Ihrem Server oder Interop installiert ist. IronXL bietet eine schnellere und intuitivere API als Microsoft.Office.Interop.Excel. IronXL funktioniert auf .NET Core 2, Framework 4.5, Azure, Mono und, Mobile und Xamarin.
Microsoft Office Interop (Excel-Automatisierung) ist eine Option bei der Erstellung/Lesung von Excel-Dateien (XLS, XLSX, CSV) von C#- oder VB.NET-Anwendungen. Es erfordert, dass auf allen Client-Rechnern dieselbe Version von Microsoft Excel installiert ist, und es funktioniert nur unter Windows-Betriebssystemen.
Schlussfolgerung
Hier hat IronXL einen klaren Vorteil gegenüber Microsoft.Office.Interop.Excel, da es nicht erfordert, dass die Microsoft Office Excel-Anwendung auf dem lokalen oder Server-Rechner installiert ist, um zu funktionieren. Außerdem wird bei der Excel-Automatisierung Microsoft Excel im Hintergrund geladen, was im Vergleich zu IronXL eine Menge MB verbraucht und eine große Anzahl von Dateien und DLLs lädt. IronXL verfügt über eine schnellere und intuitivere API als die von Microsoft.Office.Interop.Excel.
Microsoft Office-Anwendungen (einschließlich Excel) wurden als UI-Anwendungen konzipiert, und daher ist die API sehr langsam. Microsoft empfiehlt die Verwendung von Excel Automation nicht (oder jede Office Interop) auf dem Server. In diesem Fall ist IronXL mit all seinen robusten Funktionen die beste Wahl für die Integration in Softwareanwendungen.
9 .NET API-Produkte für Ihre Bürodokumente