Excel in C# ohne Microsoft Office erstellen: Magie unter der Haube

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Einleitung: Warum "ohne Office" und was steckt drin?

\n\n

Wenn Sie jemals gesucht haben, wie man eine Excel-Datei in C# generiert, sind Sie sicherlich auf die kultige Frage auf Stack Overflow mit Zehntausenden von Aufrufen gestoßen. Und der Hauptschmerz dort ist der Satz "without installing Microsoft Office". Warum? Weil COM-Objekte mitzuschleppen, von der Excel-Version auf dem Server abhängig zu sein und Fehler wie "Retrieving the COM class factory for component... failed" zu fangen, der Weg in die Hölle für einen Entwickler ist.

\n\n

Aber wie erstellt man dann .XLSX- und .XLS-Dateien? Die Antwort liegt in der Struktur des Formats selbst. Modernes Excel (ab 2007) ist ein gewöhnliches ZIP-Archiv mit XML-Dateien darin. Ja, Sie haben richtig gehört: Nehmen Sie eine beliebige .xlsx-Datei, benennen Sie sie in .zip um, öffnen Sie sie – und Sie sehen Ordner wie xl, _rels, docProps und eine Menge XML-Dokumente. Jedes Blatt, jede Zelle, jeder Stil – das ist sorgfältig strukturiertes XML. Und das alte .XLS-Format ist ein binäres Format (BIFF), aber auch dafür gibt es Open-Source-Lösungen.

\n\n

In diesem Artikel werfen wir einen Blick unter die Haube dieses Prozesses: Wir analysieren beliebte Bibliotheken, schreiben Live-Code und verstehen, was wirklich passiert, wenn wir Save() aufrufen. Los geht's!

\n\n

1. Die drei Säulen von C# für die Arbeit mit Excel ohne Office

\n\n

Heutzutage gibt es drei Hauptkandidaten, die die Aufgabe "out of the box" lösen. Jeder von ihnen arbeitet direkt mit dem Format, ohne installiertes Office zu benötigen.

\n\n

1.1. EPPlus (Lizenz LGPL / Proprietär)

\n

Die beliebteste Bibliothek für .NET. Ursprünglich kostenlos, aber ab Version 5.0 auf eine kostenpflichtige Lizenz für die kommerzielle Nutzung umgestellt. Für Bildungszwecke und kleine Projekte kann sie jedoch weiterhin verwendet werden (Version 4.5.3.3 ist die letzte freie). EPPlus funktioniert nur mit .XLSX.

\n\n

Wie es unter der Haube funktioniert: EPPlus verwendet System.IO.Packaging (das besagte ZIP-Archiv) und generiert XML-Dateien gemäß der Office Open XML (OOXML)-Spezifikation. Es kann Stile, Formeln, Diagramme erstellen – alles, was Sie in Excel sehen.

\n\n

1.2. ClosedXML

\n

Kostenlos, Open-Source (MIT-Lizenz). Funktioniert ebenfalls nur mit .XLSX. Zeichnet sich durch eine sehr benutzerfreundliche API aus, die an die Arbeit mit Excel selbst erinnert: Sie arbeiten mit Workbook, Worksheet, Cell. Unter der Haube – derselbe Open XML, aber ClosedXML übernimmt die gesamte Routine zur Erstellung der XML-Struktur.

\n\n

1.3. NPOI

\n

Port der berühmten Java-Bibliothek Apache POI. Der Hauptvorteil: Es kann sowohl mit .XLSX (über XSSFWorkbook) als auch mit dem alten .XLS (über HSSFWorkbook) arbeiten. Kostenlos, Open-Source (Apache 2.0). Ideal, wenn Sie Unterstützung für Legacy-Formate benötigen.

\n\n

Unter der Haube für .XLS: NPOI schreibt binäre Daten direkt im BIFF8-Format. Das ist komplexer als XML, erfordert aber keine Komprimierung.

\n\n

2. Code schreiben: Excel-Datei auf drei Arten erstellen

\n\n

Lassen Sie uns einen einfachen Bericht mit Kopfzeilen und Daten erstellen. Unten finden Sie Beispiele für jede Bibliothek.

\n\n

2.1. Beispiel mit ClosedXML (am einfachsten)

\n\n
using ClosedXML.Excel;\n\n// Arbeitsmappe erstellen\nusing (var workbook = new XLWorkbook())\n{\n    // Blatt hinzufügen\n    var worksheet = workbook.Worksheets.Add("Bericht");\n\n    // Kopfzeilen\n    worksheet.Cell(1, 1).Value = "Name";\n    worksheet.Cell(1, 2).Value = "Alter";\n    worksheet.Cell(1, 3).Value = "Stadt";\n\n    // Daten\n    worksheet.Cell(2, 1).Value = "Anna";\n    worksheet.Cell(2, 2).Value = 28;\n    worksheet.Cell(2, 3).Value = "Moskau";\n\n    worksheet.Cell(3, 1).Value = "Ivan";\n    worksheet.Cell(3, 2).Value = 35;\n    worksheet.Cell(3, 3).Value = "Sankt Petersburg";\n\n    // Stil für Kopfzeilen\n    var headerRange = worksheet.Range("A1:C1");\n    headerRange.Style.Font.Bold = true;\n    headerRange.Style.Fill.BackgroundColor = XLColor.LightGray;\n\n    // Spaltenbreite automatisch anpassen\n    worksheet.Columns().AdjustToC                

Blogs

Buchempfehlungen