Zum Fußzeileninhalt springen
IRONXL VERWENDEN

Excel-Datei mit Microsoft Office Interop Excel C# lesen: Und ein schnellerer Weg, Excel-Dateien ohne Office zu erstellen

Wer schon einmal versucht hat, eine Excel-Datei mit Microsoft Office InteropExcel C# zu lesen, kennt die damit verbundenen Probleme: Versionskonflikte, COM-Objektlecks und die zwingende Voraussetzung, dass Microsoft Office auf jedem Rechner installiert sein muss, auf dem der Code ausgeführt wird. In diesem Artikel erläutern wir den traditionellen Interop-Ansatz, zeigen Ihnen, wo er seine Grenzen hat, und demonstrieren anschließend, wie Sie mit IronXLExcel-Dateien erstellen, lesen und schreiben können , ohne diese Probleme.

Starten Sie jetzt mit IronXL.
green arrow pointer

Wie erstellt die Interop-Bibliothek eine Excel-Arbeitsmappe?

Der Namespace Microsoft.Office.Interop.Excel stellt dasselbe COM-Objektmodell bereit, das Excel intern verwendet. Um Excel-Dateien mithilfe dieser Interop-Bibliothek zu lesen oder zu erstellen, instanziieren Sie zunächst ein Application-Objekt, fügen eine neue Arbeitsmappe zu seiner Workbooks-Sammlung hinzu und greifen dann auf einzelne Tabellenzellen zu. Das folgende Beispiel demonstriert eine minimale Konsolenanwendung, die Microsoft.Office.Interop.Excel verwendet, um eine XLSX-Datei zu erstellen und Werte in Zellen zu schreiben.

using Excel = Microsoft.Office.Interop.Excel;
using System.Runtime.InteropServices;
// Create the Excel Application COM object
Excel.Application excelApp = new Excel.Application();
if (excelApp == null)
{
    Console.WriteLine("Error: Excel is not properly installed.");
    return;
}
// Add a new workbook and access the default worksheet
Excel.Workbook xlWorkBook = excelApp.Workbooks.Add(Type.Missing);
Excel.Worksheet xlWorkSheet = (Excel.Worksheet)xlWorkBook.ActiveSheet;
// Write data into specific cells
xlWorkSheet.Cells[1, 1] = "Product";
xlWorkSheet.Cells[1, 2] = "Price";
xlWorkSheet.Cells[2, 1] = "Widget";
xlWorkSheet.Cells[2, 2] = "29.99";
// Save as an XLSX file and clean up COM objects
string filepath = @"C:\Reports\products.xlsx";
xlWorkBook.SaveAs(filepath);
xlWorkBook.Close(false);
excelApp.Quit();
// Release every COM object to prevent orphaned Excel processes
Marshal.ReleaseComObject(xlWorkSheet);
Marshal.ReleaseComObject(xlWorkBook);
Marshal.ReleaseComObject(excelApp);
using Excel = Microsoft.Office.Interop.Excel;
using System.Runtime.InteropServices;
// Create the Excel Application COM object
Excel.Application excelApp = new Excel.Application();
if (excelApp == null)
{
    Console.WriteLine("Error: Excel is not properly installed.");
    return;
}
// Add a new workbook and access the default worksheet
Excel.Workbook xlWorkBook = excelApp.Workbooks.Add(Type.Missing);
Excel.Worksheet xlWorkSheet = (Excel.Worksheet)xlWorkBook.ActiveSheet;
// Write data into specific cells
xlWorkSheet.Cells[1, 1] = "Product";
xlWorkSheet.Cells[1, 2] = "Price";
xlWorkSheet.Cells[2, 1] = "Widget";
xlWorkSheet.Cells[2, 2] = "29.99";
// Save as an XLSX file and clean up COM objects
string filepath = @"C:\Reports\products.xlsx";
xlWorkBook.SaveAs(filepath);
xlWorkBook.Close(false);
excelApp.Quit();
// Release every COM object to prevent orphaned Excel processes
Marshal.ReleaseComObject(xlWorkSheet);
Marshal.ReleaseComObject(xlWorkBook);
Marshal.ReleaseComObject(excelApp);
Imports Excel = Microsoft.Office.Interop.Excel
Imports System.Runtime.InteropServices

' Create the Excel Application COM object
Dim excelApp As Excel.Application = New Excel.Application()
If excelApp Is Nothing Then
    Console.WriteLine("Error: Excel is not properly installed.")
    Return
End If

' Add a new workbook and access the default worksheet
Dim xlWorkBook As Excel.Workbook = excelApp.Workbooks.Add(Type.Missing)
Dim xlWorkSheet As Excel.Worksheet = CType(xlWorkBook.ActiveSheet, Excel.Worksheet)

' Write data into specific cells
xlWorkSheet.Cells(1, 1) = "Product"
xlWorkSheet.Cells(1, 2) = "Price"
xlWorkSheet.Cells(2, 1) = "Widget"
xlWorkSheet.Cells(2, 2) = "29.99"

' Save as an XLSX file and clean up COM objects
Dim filepath As String = "C:\Reports\products.xlsx"
xlWorkBook.SaveAs(filepath)
xlWorkBook.Close(False)
excelApp.Quit()

' Release every COM object to prevent orphaned Excel processes
Marshal.ReleaseComObject(xlWorkSheet)
Marshal.ReleaseComObject(xlWorkBook)
Marshal.ReleaseComObject(excelApp)
$vbLabelText   $csharpLabel

Der obige Code erstellt eine Excel-Arbeitsmappe , füllt ein Arbeitsblatt mit Zeilen- und Zellenwerten, speichert die Datei und gibt dann jedes COM-Objekt manuell frei. Diese Bereinigung am Ende ist nicht optional – wenn Sie sie auslassen, werden Sie feststellen, dass Geisterprozesse von EXCEL.EXE auf Ihrem System Speicherplatz belegen. Beachten Sie außerdem, dass der Code prüft, ob das Application-Objekt null ist; Falls Microsoft Office nicht installiert ist, wird jede nachfolgende Zeile einen Fehler auslösen. Die Version der Office-Interop-Bibliothek muss mit der Office-Version auf dem Rechner übereinstimmen, andernfalls treten FileNotFoundException und ähnliche Laufzeitfehler auf, die bekanntermaßen sehr schwer zu debuggen sind.

Visual Basic-Entwickler stehen bei der Verwendung von Excel Microsoft.Office.Interop.Excel vor denselben Herausforderungen, da die zugrunde liegende COM-Infrastruktur in allen .NET Sprachen identisch ist.

Welche Probleme verursacht der Interoperabilitätsansatz auf Servern und in der Cloud?

Microsoft rät ausdrücklich von der Verwendung von Office Interopin Serverumgebungen ab. Die Interop-Bibliothek startet im Hintergrund eine vollständige Instanz der Excel-Anwendung. Das bedeutet, dass bei jeder Anfrage an einen Webserver oder eine Cloud-App ein versteckter Windows-Desktop-Prozess gestartet wird. Auf einem Linux-Server funktioniert das überhaupt nicht. Verbindungszeichenfolgen zu Datenbanken, Dateisystempfade und Benutzerberechtigungen werden zu zusätzlichen Fehlerquellen, wenn Office nicht installiert ist oder wenn verschiedene Versionen von Microsoft Office miteinander in Konflikt stehen.

Entwickler posten häufig Beiträge zu diesen Problemen auf Stack Overflow und Microsoft Q&A und suchen nach Möglichkeiten, Excel-Dateien zu lesen und zu erstellen, ohne dass Excel installiert sein muss. Die wichtigsten Unterschiede sind in der folgenden Tabelle zusammengefasst.

| Feature | Office Interop| IronXL| | ---| ---| ---| | Erfordert die Installation von Excel. | Ja – nur der Entwicklerrechner und jeder Produktionsserver. |Nein| | Unterstützte Excel-Dateiformate | XLS, XLSX| XLS, XLSX, CSV, TSV, JSON, XML| | Plattformübergreifend (.NET Core, Linux, macOS) | Nur für Windows| Windows, Linux, macOS, Azure| | Bereinigung der COM-Objekte erforderlich | Ja – manuelles Marshal.ReleaseComObject |Nein| | Server-/Cloud-Bereitstellung | Nicht von Microsoft empfohlen | Vollständig unterstützt| | Leistung| Langsamer – startet einen versteckten Excel-Prozess | Bessere Leistung – verwalteter .NET Code | | .NET Framework und .NET Core Unterstützung | Nur .NET Framework | .NET Framework, .NET Core, .NET 5–10 |

Wie können Excel-Dateien erstellt werden, ohne dass Microsoft Office installiert ist?

IronXL ist eine .NET Excel-Bibliothek , die Excel-Dateien vollständig in verwaltetem Code liest, schreibt und erstellt. Es besteht keine Abhängigkeit von Microsoft Office, es muss kein COM-Objekt freigegeben werden und es müssen keine Versionskonflikte behoben werden. Installieren Sie es über NuGet in Visual Studio mithilfe des Projektmappen-Explorers, suchen Sie nach IronXl.Excel, und schon kann es losgehen. Es funktioniert einwandfrei mit .NET Framework 4.6.2+, .NET Core und .NET 5 bis .NET 10 auf allen gängigen Betriebssystemen.

using IronXL;
// Create a new Excel workbook — default value is XLSX format
WorkBook workBook = WorkBook.Create(ExcelFileFormat.XLSX);
// Add a worksheet and populate cells with data
WorkSheet workSheet = workBook.CreateWorkSheet("Sales");
workSheet["A1"].Value = "Product";
workSheet["B1"].Value = "Price";
workSheet["A2"].Value = "Widget";
workSheet["B2"].Value = 29.99;
// Apply basic formatting
workSheet["A1"].Style.Font.Bold = true;
workSheet["B1"].Style.Font.Bold = true;
// Save the XLSX file
workBook.SaveAs(@"C:\Reports\products.xlsx");
using IronXL;
// Create a new Excel workbook — default value is XLSX format
WorkBook workBook = WorkBook.Create(ExcelFileFormat.XLSX);
// Add a worksheet and populate cells with data
WorkSheet workSheet = workBook.CreateWorkSheet("Sales");
workSheet["A1"].Value = "Product";
workSheet["B1"].Value = "Price";
workSheet["A2"].Value = "Widget";
workSheet["B2"].Value = 29.99;
// Apply basic formatting
workSheet["A1"].Style.Font.Bold = true;
workSheet["B1"].Style.Font.Bold = true;
// Save the XLSX file
workBook.SaveAs(@"C:\Reports\products.xlsx");
Imports IronXL

' Create a new Excel workbook — default value is XLSX format
Dim workBook As WorkBook = WorkBook.Create(ExcelFileFormat.XLSX)
' Add a worksheet and populate cells with data
Dim workSheet As WorkSheet = workBook.CreateWorkSheet("Sales")
workSheet("A1").Value = "Product"
workSheet("B1").Value = "Price"
workSheet("A2").Value = "Widget"
workSheet("B2").Value = 29.99
' Apply basic formatting
workSheet("A1").Style.Font.Bold = True
workSheet("B1").Style.Font.Bold = True
' Save the XLSX file
workBook.SaveAs("C:\Reports\products.xlsx")
$vbLabelText   $csharpLabel

Excel-Datei erstellt mit IronXL

Excel-Datei lesen mit Microsoft Office InteropExcel C#: Und ein schnellerer Weg, Excel-Dateien ohne Office zu erstellen: Bild 1 - IronXL-Ausgabedatei

Der obige Code erzielt das gleiche Ergebnis wie das Interop-Beispiel, benötigt aber nur halb so viele Zeilen und kommt ohne externe Abhängigkeiten aus. WorkBook.Create() initialisiert eine neue Arbeitsmappe im angegebenen Excel-Dateiformat (standardmäßig XLSX), und CreateWorkSheet fügt ein benanntes Arbeitsblatt hinzu. Die Zellenwerte werden über eine übersichtliche Indexersyntax festgelegt, und SaveAs kümmert sich automatisch um die Dateierweiterung. Kein Quit(), kein Marshal.ReleaseComObject, kein versteckter Prozess. Dieselbe API unterstützt auch das Speichern als XLS, CSV, JSON oder XML mit einem einzigen Methodenaufruf; eine vollständige Liste der verfügbaren Optionen finden Sie in der Exportdokumentation .

IronXL integriert sich außerdem nahtlos in System.Data-Objekte, sodass Daten, die aus Datenbankverbindungszeichenfolgen über eine DataTable fließen , direkt in ein Arbeitsblatt geschrieben werden können, ohne dass eine manuelle Zeilen-für-Zeilen-Iteration erforderlich ist.

Wie können Daten in einem Arbeitsblatt zeilen- und zellenübergreifend gelesen und geschrieben werden?

Das Lesen vorhandener Excel-Dateien ist genauso unkompliziert. Die Methode WorkBook.Load akzeptiert einen Dateipfad zu einer beliebigen XLS-, XLSX- oder CSV-Datei. Anschließend stellt jedes Arbeitsblatt seine Zeilen und Zellen als iterierbare Sammlungen bereit, wodurch das Lesen von Daten, das Ändern von Werten oder das Hochladen von Ergebnissen in eine Datenbank oder einen Server vereinfacht wird.

using IronXL;
// Load an existing Excel file
WorkBook workBook = WorkBook.Load(@"C:\Reports\products.xlsx");
WorkSheet workSheet = workBook.DefaultWorkSheet;
// Read and display each row of data
foreach (var row in workSheet.Rows)
{
    foreach (var cell in row.ToArray())
    {
        Console.Write(cell.Value + "\t");
    }
    Console.WriteLine();
}
// Update a specific cell and save
workSheet["B2"].Value = 34.99;
workBook.SaveAs(@"C:\Reports\products_updated.xlsx");
using IronXL;
// Load an existing Excel file
WorkBook workBook = WorkBook.Load(@"C:\Reports\products.xlsx");
WorkSheet workSheet = workBook.DefaultWorkSheet;
// Read and display each row of data
foreach (var row in workSheet.Rows)
{
    foreach (var cell in row.ToArray())
    {
        Console.Write(cell.Value + "\t");
    }
    Console.WriteLine();
}
// Update a specific cell and save
workSheet["B2"].Value = 34.99;
workBook.SaveAs(@"C:\Reports\products_updated.xlsx");
Imports IronXL

' Load an existing Excel file
Dim workBook As WorkBook = WorkBook.Load("C:\Reports\products.xlsx")
Dim workSheet As WorkSheet = workBook.DefaultWorkSheet

' Read and display each row of data
For Each row In workSheet.Rows
    For Each cell In row.ToArray()
        Console.Write(cell.Value & vbTab)
    Next
    Console.WriteLine()
Next

' Update a specific cell and save
workSheet("B2").Value = 34.99
workBook.SaveAs("C:\Reports\products_updated.xlsx")
$vbLabelText   $csharpLabel

Lesen von Excel-Dateien mit IronXL

Excel-Datei lesen mit Microsoft Office InteropExcel C#: Und ein schnellerer Weg, Excel-Dateien ohne Office zu erstellen: Bild 2 - Lesen der Excel-Dateiausgabe mit IronXL

Dieses Beispiel zeigt, wie man Excel-Dateien liest, indem man die Rows-Sammlung durchläuft und auf die Value-Eigenschaft jeder Zelle zugreift. Das verschachtelte Schleifenmuster – var row gefolgt von var cell – spiegelt die natürliche Denkweise beim Umgang mit Tabellenkalkulationen wider. Nach dem Einlesen der Daten aktualisiert der Code eine einzelne Zelle und speichert die Arbeitsmappe in einer neuen XLSX-Datei, wobei das Original erhalten bleibt. IronXLberechnet alle Excel-Formeln automatisch neu, wenn ein Tabellenblatt geändert wird. Diese Funktion bietet auch die Interop-Bibliothek, allerdings auf Kosten der Einrichtung einer vollständigen Excel-Instanz.

Für komplexere Szenarien wie Formeln, bedingte Formatierung, das Zusammenführen von Zellen oder die Arbeit mit mehreren Tabellenblättern deckt die IronXL -API-Referenz alle verfügbaren Methoden und Eigenschaften ab. Die Bibliothek unterstützt auch den Zugriff von ASP.NET Controllern aus, wodurch das Generieren und Herunterladen von Excel-Dateien von einer Webanwendung oder einem API-Endpunkt unkompliziert wird, ohne dass Office auf dem Server installiert sein muss.

Was ist der beste Weg für die .NET Excel-Automatisierung?

Wenn ein Projekt an eine ältere Windows-Desktopumgebung gebunden ist, in der Microsoft Office bereits installiert ist und die gleiche Version stabil bleibt, kann die Interop-Bibliothek für grundlegende Aufgaben gut funktionieren. Für alle anderen Anwendungsfälle, wie Serverbereitstellungen, Cloud-Anwendungen, plattformübergreifende Builds oder Szenarien, in denen eine bessere Leistungund weniger Laufzeitfehler gewünscht sind, ist eine eigenständige .NET Excel-Bibliothek die eindeutige Wahl.

IronXL übernimmt alle gängigen Excel-Operationen ( Erstellen von Arbeitsmappen , Lesen von Excel-Tabellendaten, Schreiben in Zellen, Speichern in verschiedenen Dateiformaten, einschließlich XLS und XLSX) über eine saubere, moderne API, die überall dort läuft, wo .NET ausgeführt wird. Es unterstützt sowohl C#- als auch Visual Basic-Projekte, und derselbe Code funktioniert ohne Änderungen unter Windows, Linux und macOS.

Starten Sie eine kostenlose 30-Tage-Testversion, um sie in Ihrem eigenen Projekt zu testen, oder informieren Sie sich über die Lizenzoptionen, wenn Sie bereit für die Implementierung sind.

Häufig gestellte Fragen

Was sind die Einschränkungen bei der Verwendung von Microsoft Office Interop Excel in C#?

Die Verwendung von Microsoft Office Interop Excel in C# kann zu Problemen wie Versionsabweichungen, COM-Objektlecks und der Notwendigkeit führen, Microsoft Office auf jedem Rechner zu installieren, auf dem der Code ausgeführt wird.

Wie verbessert IronXL den Umgang mit Excel-Dateien in C#?

IronXL ermöglicht es Ihnen, Excel-Dateien zu erstellen, zu lesen und zu schreiben, ohne dass Sie Microsoft Office benötigen, und beseitigt Probleme wie Versionsabweichungen und COM-Objektlecks.

Kann IronXL auf einem Server verwendet werden, auf dem kein Microsoft Office installiert ist?

Ja, IronXL ist serversicher und erfordert keine Installation von Microsoft Office, was es zu einer plattformübergreifenden Lösung für die Bearbeitung von Excel-Dateien macht.

Was sind die Vorteile der Verwendung von IronXL gegenüber Excel Interop?

IronXL bietet einen zuverlässigeren und effizienteren Weg, mit Excel-Dateien umzugehen, da es sich nicht auf Microsoft Office stützt, wodurch das Risiko von häufigen Problemen wie Versionsabweichungen und COM-Objektlecks verringert wird.

Ist IronXL mit allen Versionen von Excel-Dateien kompatibel?

IronXL unterstützt eine Vielzahl von Excel-Dateiformaten, darunter XLSX, XLS, CSV und TSV, und ist damit vielseitig für verschiedene Excel-Dateioperationen einsetzbar.

Benötigt IronXL eine spezielle Einrichtung, um auf einem Rechner zu funktionieren?

IronXL erfordert keine Microsoft Office-Installation und kann ohne besondere Einrichtung in Ihre C#-Projekte integriert werden.

Kann IronXL große Excel-Dateien effizient handhaben?

Ja, IronXL wurde entwickelt, um große Excel-Dateien effizient zu lesen und zu schreiben und bietet schnelle Leistung ohne die Einschränkungen von Interop.

Welche Plattformen werden von IronXL unterstützt?

IronXL ist plattformübergreifend und unterstützt Windows, Linux und MacOS, was es zu einer flexiblen Wahl für die Manipulation von Excel-Dateien in verschiedenen Umgebungen macht.

Wie behandelt IronXL die Erstellung von Excel-Dateien?

IronXL bietet eine einfache API zur programmgesteuerten Erstellung von Excel-Dateien in C# und bietet Funktionen zum Formatieren von Zellen, Verwalten von Arbeitsblättern und mehr.

Gibt es eine Community oder Unterstützung für IronXL-Benutzer?

Ja, IronXL-Benutzer können auf Dokumentation, Tutorials und Community-Support zugreifen, um bei Fragen zur Integration oder Nutzung zu helfen.

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

Iron Support Team

Wir sind 24 Stunden am Tag, 5 Tage die Woche online.
Chat
E-Mail
Rufen Sie mich an