Excel-Export mit Spreadsheet Light

Wenn Sie ein Abonnement des Magazins 'DATENBANKENTWICKLER' besitzen, können Sie sich anmelden und den kompletten Artikel lesen.
Anderenfalls können Sie das Abonnement hier im Shop erwerben.

Excel-Export mit Spreadsheet Light

Das Thema Reporting haben wir im DATENBANKENTWICKLER noch gar nicht behandelt. Das liegt auch daran, dass es unter C#/WPF keine so einfach einsetzbare Reporting-Funktion wie etwa die Berichte und Access gibt. Also wollen wir uns einmal verschiedene Möglichkeiten ansehen, um die Daten einer Datenbank aus einer C#-Anwendung zu exportieren, um diese etwa in einer anderen Anwendung zu öffnen und auszudrucken. Den Start machen wir mit Microsoft Excel.

Voraussetzungen

In diesem Artikel wollen wir uns nicht, wie etwas unter Access/VBA möglich, per Automation an Excel heranwagen und die Excel-Dokumente per Excel erstellen. Stattdessen nutzen wir eine Bibliothek namens Spreadsheet Light, welche kostenlos verfügbar ist und Excel-Dateien erstellen kann, ohne dass Excel überhaupt auf dem Rechner existiert. Das ist natürlich gerade für Webanwendungen interessant, da so keine Office-Installation benötigt wird, aber auch für Desktop-Anwendungen.

Spreadsheet light installieren

Spreadsheet light ist eine Open Source-Anwendung, die Sie kostenlos in Ihren Projekten dürfen. In den Beispielen verwenden wir ein C#/WPF-Projekt, dem Sie noch das entsprechende Paket plus Verweis hinzufügen müssen. Sie finden den Eintrag SpreadsheetLight im Nuget-Paket-Manager, den Sie über den Kontextmenü-Eintrag Nuget-Pakete verwalten des Projekts im Projektmappen-Explorer starten (siehe Bild 1).

Hinzufügen von SpreadsheetLight über den Nuget-Paket-Manager

Bild 1: Hinzufügen von SpreadsheetLight über den Nuget-Paket-Manager

Erste leere Excel-Datei erzeugen

Damit haben wir alle Voraussetzungen geschaffen. Ein erstes Beispiel wollen wir durch einen Mausklick auf eine neue Schaltfläche namens btnDateiErstellen ausführen. Diese fügen wir dem Fenster MainWindow.xaml hinzu und tragen für die Ereignisprozedur btnDateiErstellen_Click die folgenden beiden Befehle ein:

private void btnDateiErstellen_Click(object sender, RoutedEventArgs e) {
     SLDocument xls = new SLDocument();
     xls.SaveAs("LeereDatei.xlsx");
}

Der hier verwendete Typ SLDocument dürfte nun noch als fehlerhaft markiert werden. Das ist kein Problem – nachdem Sie den Verweis auf den Namespace SpreadsheetLight hinzugefügt haben, verschwindet die Markierung:

using SpreadsheetLight;

Wenn Sie das Projekt nun starten und die Schaltfläche betätigen, erstellt die Anwendung im Hintergrund ein erstes, leeres Excel-Dokument (siehe Bild 2). Das neue Dokument wurde übrigens im Verzeichnis der erstellte .exe-Datei erstellt, also beim Testen von Visual Studio aus etwa im Verzeichnis binDebug des Projektverzeichnisses.

Die erste per SpreadsheetLight erstellt Excel-Datei

Bild 2: Die erste per SpreadsheetLight erstellt Excel-Datei

Wenn Sie Excel schon einmal von Access/VBA aus automatisiert haben, wissen Sie, dass Sie sonst einige Befehle mehr benötigen. Schauen wir uns nun an, wie wir die Excel-Datei füllen und formatieren können.

Daten zur Excel-Tabelle hinzufügen

Im zweiten Beispiel wollen wir eine Zelle der Tabelle mit einem Wert füllen, in diesem Fall einer Zeichenkette. Dazu verwenden wir die Methode SetCellValue, die als ersten Parameter die Angabe des Zellbezugs erwartet (hier "A1") und als zweiten Parameter den einzufügenden Wert ("BeispielText"):

private void btnWertSchreiben_Click(object sender, RoutedEventArgs e) {
     SLDocument xls = new SLDocument();
     xls.SetCellValue("A1", "Beispieltext");
     xls.SaveAs("LeereDatei.xlsx");
}

Dabei markiert Visual Studio nun die Anweisung mit der Methode SetCellValue und liefert eine Fehlermeldung, nach der ein Verweis auf die Bibliothek DocumentFormat.OpenXML fehlt. Diese fügen Sie durch Auswahl des Menüeintrags Projekt|Verweis hinzufügen... und die Auswahl des Eintrags DocumentFormat.OpenXML im nun erscheinenden Dialog Verweis-Manager hinzu (siehe Bild 3). Anschließend verschwindet auch diese Fehlermarkierung und Sie können das Einfügen des Zellinhalts nach dem Start des Debuggens und einem Klick auf die Schaltfläche cmdWertSchreiben ausprobieren.

Verweis auf die Bibliothek DocumentFormat.OpenXML

Bild 3: Verweis auf die Bibliothek DocumentFormat.OpenXML

Verschiedene Zellbezüge

Im ersten Beispiel haben wir als Zellbezug mit A1 die klassische Variante gewählt. Excel zeigt ja auch die Zeilenüberschriften als Buchstaben und die Spaltenüberschriften als Zahlen an. Für die Programmierung ist dies indes nicht unbedingt immer hilfreich, vor allem, wenn Sie Daten innerhalb einer Schleife in die Excel-Tabelle schreiben wollen. Doch das ist unter Spreadsheet Light kein Problem: Die Methode SetCellValue bietet insgesamt 36 Überladungen. Warum so viele? Erstens, weil die Methode verschiedene Datentypen für den einzufügenden Wert entgegennehmen können soll, in diesem Fall bool, byte, DateTime, decimal, InlineString, double, float, int, long, short, SLRstType, string, uint, ulong, ushort, DateTime (mit bool für 1904-Epoche), DateTime (als string), DateTime (mit bool für 1904-Epoche als String). Das sind bereits 18 Varianten für den zweiten Parameter. Diese gibt es jeweils in Kombination mit dem string-Parameter CellReference (also beispielsweise "A1") und mit den beiden int-Parametern RowIndex und ColumnIndex zur Angabe der zu füllenden Zelle als 1-basierten Index.

Wenn Sie also eine Matrix von 10x10 Zellen jeweils mit dem Produkt des Zellindexes füllen wollen, verwenden Sie die folgende Methode:

private void btnZehnMalZehn_Click(object sender, RoutedEventArgs e) {
     SLDocument xls = new SLDocument();

Dies war die Leseprobe dieses Artikels.
Melden Sie sich an, um auf den vollständigen Artikel zuzugreifen.

Bitte geben Sie die Zeichenfolge in das nachfolgende Textfeld ein

Die mit einem * markierten Felder sind Pflichtfelder.

Ich habe die Datenschutzbestimmungen zur Kenntnis genommen.