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.

Neues aus unseren Magazinen
Listenfeld: Reihenfolge mehrerer Einträge...

Wir haben bereits in mehreren Beiträgen beschrieben, wie Sie die individuelle Reihenfolge von Elementen einer Tabelle über den Inhalt eines Feldes etwa namens »ReihenfolgeID« einstellen können –... [mehr]

Diagramme mit gefilterten Daten

In Ausgabe 2/2019 haben wir in zwei Artikeln die modernen Diagramme von Access vorgestellt. Im vorliegenen Beitrag zeigen wir Ihnen, wie Sie diese abhängig von den in einem Formular angezeigten... [mehr]

Benutzerverwaltung mit verschlüsselten...

Wenn Sie in einer Access-Anwendung Benutzer verwalten wollen, die sich per Benutzername und Kennwort an die Anwendung anmelden, sollten Sie sehr sensibel mit den in der Anwendung gespeicherten... [mehr]

HTML-Tabellen mit fester Kopfzeile

In den vorherigen Ausgaben von Access im Unternehmen und in der aktuellen Ausgabe arbeiten wir in einigen Beiträgen mit dem Webbrowser-Steuerelement und stellen Daten, die wir mit den Bordmitteln... [mehr]

Flexible HTML-Tabellen mit fester Kopfzeile

Im Beitrag »HTML-Tabellen mit fester Kopfzeile« haben wir gezeigt, wie Sie Daten aus einer bestimmten Abfrage in einem Webbrowser-Steuerelement so anzeigen, dass die Spaltenköpfe oben fixiert... [mehr]

Berechtigungen per HTML verwalten

Im Beitrag »Benutzerverwaltung mit verschlüsselten Kennwörtern« stellen wir eine Lösung vor, in der wir die Berechtigungen von Benutzergruppen an Datenbankobjekten definieren. Dort benötigen wir... [mehr]

Benutzer und Berechtigungen ermitteln

In den Beiträgen »Benutzerverwaltung mit verschlüsselten Kennwörtern« und »Berechtigungen per HTML verwalten« haben wir die Voraussetzungen für eine Benutzerverwaltung geschaffen. Im vorliegenden... [mehr]

Zugriffsrechte mit Datenmakros

Es gibt verschiedene Möglichkeiten, auf Basis des aktuell angemeldeten Benutzers sicherzustellen, dass dieser nur die für ihn vorgesehenen Aktionen mit Daten durchführen darf – beispielsweise durch... [mehr]

Kennwörter generieren

Für den einen oder anderen Zweck möchten Sie vielleicht Kennwörter generieren oder in einer Benutzeroberfläche die Möglichkeit zum Generieren von Kennwörtern anbieten. Wenn Sie etwa Benutzer zu... [mehr]

Neuer Datensatz von Frontend zu Backend

Für manche Themen gibt es keine kurze, prägnante Überschrift. In diesem Fall wollen wir zeigen, wie Sie einen neuen Datensatz anlegen, der in einer temporären Tabelle im Frontend gespeichert wird,... [mehr]