13. Mai 2022
Lesedauer 16 Min.
Von Excel zu FlexCel
Tabellen mit .NET erstellen
Im Büroalltag gilt Excel als Schweizer Taschenmesser. Die Bibliothek TMS FlexCel befähigt eigene Anwendungen, mit Excel-Tabellen zu arbeiten.

Excel und Tabellen, das gehört zusammen. Dabei gilt die Tabellenkalkulation aus dem Hause Microsoft nicht nur unter den Mitarbeitern aus der Controlling-Abteilung zu den Standardwerkzeugen. Fast jeder Anwender hat auf seinem Rechner eine Tabelle im Excel-Format, und wenn es nur die Übersicht mit den aktuellen Kontaktdaten ist. Excel ist neben Word, PowerPoint und Outlook Bestandteil der Office-Suite von Microsoft. Bedienung und Funktionsweise gelten als allgemein bekannt und für allerlei Aufgaben als nützlich. Lizenziert wird Excel heute über die Microsoft-365-Suite, die neben den klassischen Office-Anwendungen auch den Zugriff auf die Videokonferenzsoftware Microsoft Teams und den Cloud Speicherdienst OneDrive enthält. Es gibt unterschiedliche Lizenzierungsmodelle für kleinere und mittlere Unternehmen, für Großunternehmen, für die private Nutzung und für den Bildungssektor.Die Funktionsvielfalt in Excel ist inzwischen sehr groß, sodass es sich für sehr unterschiedliche Aufgaben verwenden lässt. Es unterstützt mittlerweile leistungsfähige Funktionen aus den unterschiedlichsten Bereichen [1], so zum Beispiel aus der Finanzmathematik oder der Statistik (Bild 1). Dabei stellt es nicht nur Funktionen aus dem jeweiligen Grundlagenbereich bereit, sondern auch fortschrittliche und komplexe Berechnungen, Datenauswertungen, Visualisierungen und so weiter sind damit möglich.

Die Excel-Funktionen, nach Kategorien zusammengefasst(Bild 1)
Autor
Diese Funktionsvielfalt und die weite Verbreitung von Excel führen dazu, dass die Anwenderinnen und Anwender mit dem Tool gut vertraut sind und es sich als Quasistandard für Tabellenkalkulationssoftware etabliert hat. Das gilt inzwischen nicht nur für das Betriebssystem Windows. Excel steht als vollwertige Desktop-Anwendung auch auf macOS zur Verfügung. Für die Nutzung im Web gibt es eine Online-Version und für Android und iOS ebenfalls entsprechende Apps.Kommen alternative Softwareprodukte zum Einsatz, zum Beispiel die Tabellenkalkulation Calc aus der Suite Libre Office, dann gibt es inzwischen sehr gut funktionierende Import- und Export-Datenfilter, um auch komplexe Dateien inklusive Berechnungen, Grafiken et cetera auszutauschen.Warum erzählen wir Ihnen das alles? Arbeitet man an einer eigenen datenorientierten Applikation, dann müssen häufig Daten mit anderen Anwendungen ausgetauscht werden. Typische Anwendungsfälle und Anforderungen sind:
- Import von Daten: Daten, die in der eigenen Anwendung verarbeitet werden sollen, liegen in Form einer Excel-Datei vor. Auch aus Drittprogrammen gibt es sehr häufig die Möglichkeit, die betreffenden Daten in das Excel-Format zu exportieren und in Excel aufzubereiten.
- Export von Daten: Daten aus der Geschäftsanwendung sollen im Excel-Format exportiert werden. Dann können sie gemäß den Anforderungen weiterverarbeitet, grafisch aufbereitet oder anderweitig verwendet werden.
- Erstellen von Tabellen und Berichten: Die eigene Applikation soll in der Lage sein, Excel-Dateien zu erzeugen, die unterschiedliche Funktionen enthalten. Dabei sollen nicht nur Datenwerte in die Zellen geschrieben werden, sondern diese werden durch Formeln und Bezüge untereinander verknüpft. Interaktive Grafiken dienen der Visualisierung oder es werden druckfähige Berichte erzeugt.
Office-Automatisierung
Das Lesen und Schreiben des Excel-Dateiformats ist keine neue Anforderung und lässt sich auf unterschiedliche Art und Weise angehen. Zum einem ist danach zu unterscheiden, ob für das Lesen und Schreiben eine lizenzierte Office-Installation auf dem Rechner vorausgesetzt werden kann oder ob es auch ohne lokale Excel-Installation funktioniert.Ist Excel auf dem betreffenden Rechner eingerichtet, dann besteht die Möglichkeit, das API von Microsoft Office im eigenen Programm zu verwenden. Dieses Vorgehen wird unter dem Stichwort .NET-Interoperabilität beschrieben. Konkret handelt es sich dabei um die Verwendung von Office-Interop-Objekten [2].Um in einer .NET-Anwendung auf diese Weise mit Office-Applikationen zu arbeiten, ist es notwendig, die zugehörige Assembly in das Projekt als Verweis aufzunehmen (Bild 2). Über diese Schnittstelle können Sie dann Excel „fernsteuern“, also zum Beispiel eine Datei erstellen und Daten in diese schreiben oder aus ihr lesen. Dieses Vorgehen hat jedoch einige Nachteile:
Die Interop-Assemblyfür die Office-Automation, die in .NET-Anwendungen eingebunden werden kann(Bild 2)
Autor
- Office-Software: Es ist eine Installation der Office-Programme auf dem betreffenden Rechner notwendig. Sie müssen also prüfen und letztendlich voraussetzen, dass auf dem Computer des Kunden Excel eingerichtet ist, ansonsten funktioniert dieses Vorgehen nicht.
- .NET Framework: Die Kommunikation erfolgt über die .NET-Interoperabilität, das heißt, es geht nur mit .NET-Applikationen. Der Einsatz von .NET Core und anderen Betriebssystemen ist über diese Schnittstelle nicht möglich.
- Beschränkung auf den Client: Das Szenario ist für eine Nutzung auf dem Client vorgesehen, das heißt, Excel und die Anwendung zum Fernsteuern müssen auf dem Desktop-Rechner lokal vorhanden sein. Die Automatisierung von Office auf einem Server ist stark eingeschränkt.
- Laufzeitverhalten: Die Interaktion über den Weg der Office-Automatisierung ist gerade bei größeren Datenmengen und Dateien nicht sehr gut.
Nutzung von Bibliotheken
Hier gibt es einige Optionen auf dem Markt, die einen unterschiedlichen Funktionsumfang aufweisen, für verschiedene Programmiersprachen geeignet sind und anderen Lizenzbedingungen unterliegen. Für den Einsatz zusammen mit .NET gibt es beispielsweise Aspose.Cells [4], Spire.XLS for .NET [5], XlsIORenderer.Net.Core [6], TMS FlexCel Studio for .NET [7], SpreadsheetGear for .NET Standard [8], ExcelMapper [9] und GemBox.Spreadsheet [10]. Dabei handelt es sich sowohl um einzelne Bibliotheken, die als NuGet-Package vorliegen und oft unter der MIT-Lizenz bereitgestellt werden, als auch um kommerzielle und funktionsreiche Softwaresuiten. Wer beispielsweise nur eine Excel-Datei mit einigen Daten lesen und schreiben will, kann prüfen, ob er mit einer einfachen und kostenfreien Bibliothek ans Ziel kommt.Anders sieht es aus, wenn umfassende Excel-Dateien mit einer großen Funktionsvielfalt aus der App heraus zu erstellen und zu bearbeiten sind, das heißt, wenn die Dateien Datenwerte, Formeln, Grafiken, Berichte und so weiter enthalten sollen. Hier bietet sich der Einsatz einer professionellen Bibliothek mit entsprechendem Funktionsumfang, Support und Unterstützung für unterschiedliche Systeme an. Davon gibt es eine ganze Reihe. Dazu gehört die Softwaresuite TMS FlexCel Studio for .NET, die hier vorgestellt wird.TMS FlexCel Studio for .NET
Die Software TMS FlexCel Studio for .NET dient dem Lesen, Erstellen und Editieren von einfachen bis komplexen Excel-Dateien mit einer großen Anzahl von Funktionen. Die wesentlichen technischen Eigenschaften und Funktionen fasst Tabelle 1 zusammen.
|
Die Bibliothek ist zwar kostenpflichtig (Einzellizenz 195 Euro, Unternehmenslizenz 775 Euro), es gibt jedoch eine Trial-Edition für Experimente und um die Eignung im konkreten Projekt zu beurteilen. Sie können TMS FlexCel direkt beim Hersteller entweder als NuGet-Package herunterladen oder als komplettes Installationspaket für die unterschiedlichen Visual-Studio-Versionen, auch für VS 2022. Aktuell ist die Version 7.14. Auch das NuGet-Testpaket ist nur über die TMS-Website erhältlich. Sie laden es von dort herunter, entpacken es und fügen es in Visual Studio als lokale Quelle hinzu (Bild 3 vorne) Die Software steht auch für Delphi zur Verfügung, siehe den Kasten TMS FlexCel Studio für Delphi.
TMS FlexCel Studio für Delphi
Die Bibliothek TMS FlexCel Studio gibt es nicht nur für .NET, sondern auch für Delphi [16], konkret für die User-Interface-Frameworks Visual Component Library (VCL) für Windows-Betriebssysteme und FireMonkey (FMX) für eine plattformübergreifende Entwicklung. In diesem Fall wird mit der Programmiersprache Delphi (Object Pascal) oder C++ programmiert, als integrierte Entwicklungsumgebung kommt Delphi zum Einsatz. Funktionen und Vorgehensweise dieser Version von TMS FlexCel Studio sind mit der .NET-Bibliothek identisch.

Die PaketquelleTMS FlexCel zu NuGet hinzufügen (vorne) und Verweis auf die Bibliothek im Projekt (hinten) aufnehmen(Bild 3)
Autor
Das erste Experiment ist denkbar einfach. Es besteht aus einer Windows-Forms-Anwendung (.NET 6), in die das NuGet-Paket eingebunden wird (Bild 3 hinten). Dazu muss dieses als lokale Quelle der Paketverwaltung hinzugefügt werden; dann sind Verweise aus dem Projekt auf die Bibliothek möglich. Danach lässt sich schon eine „Hello World“-Anwendung erstellen. In diesem Fall geht es um das Generieren einer einfachen Excel-Datei. Legen Sie einen Button und eine Click()-Methode an. Letztere führt den folgenden Quellcode aus:
XlsFile xls = new XlsFile(<span class="hljs-number">1</span>,
TExcelFileFormat.v2021, true);
xls.SetCellValue(<span class="hljs-number">1</span>, <span class="hljs-number">1</span>,
<span class="hljs-string">"Test mit FlexCel"</span>);
xls.SetCellValue(<span class="hljs-number">2</span>, <span class="hljs-number">1</span>, <span class="hljs-number">100.0</span>);
xls.SetCellValue(<span class="hljs-number">3</span>, <span class="hljs-number">1</span>, <span class="hljs-number">200</span>,<span class="hljs-number">0</span>);
xls.SetCellValue(<span class="hljs-number">4</span>, <span class="hljs-number">1</span>, new
TFormula(<span class="hljs-string">"=Sum(A2:A3)"</span>));
xls.Save(Path.Combine(Environment.
GetFolderPath(Environment.
SpecialFolder.Personal),
<span class="hljs-string">"test.xlsx"</span>));
Dabei gilt:
- new XlsFile() erzeugt ein neues Excel-Dokument mit einem Tabellenblatt im angegebenen Excel-Format und der Option, dass eine vorhandene Datei überschrieben wird.
- SetCellValue() schreibt einen Wert (etwa Zeichenkette, Zahl, Formel) in eine bestimmte Zelle der Tabelle.
- Save() speichert die Excel-Datei am angegebenen Ort.

Die durch Quellcodeerzeugte Excel-Datei(Bild 4)
Autor
Funktionen von TMS FlexCel
TMS FlexCel bietet dem Programmierer ein sehr umfassendes API, das einen Großteil der Funktionen von Microsofts Tabellenkalkulation kapselt. Diese gliedern sich in die folgenden Bereiche:- Core: Basisklassen zur Nutzung der Bibliothek
- Draw: Zeichenfunktionen
- Pdf: Klassen für das Erstellen von PDF-Dateien
- Render: Klassen zum Darstellen einer Excel-Tabelle auf dem Bildschirm, zum Drucken oder um sie in andere Dateiformate zu exportieren
- Report: Komponenten zum Erstellen von Excel-Berichten basierend auf einer Vorlage
- AddinFunctions: Excel-Add-in-Funktionen, die von FlexCel bei der Neuberechnung verwendet werden
- XlsAdapter: Natives API zum Lesen und Schreiben einer Excel-Datei
- Winforms /AspNet: Spezifische Klassen für Windows-Forms- und ASP.NET-Anwendungen

Die API-Dokumentationder Methode SetCellValue()(Bild 5)
Autor
Aus Excel werde Quellcode
Bisher war das Ziel, eine Excel-Datei mithilfe von Quellcode zu erzeugen. Das kann ein Szenario sein, wird jedoch nur bis zu einer gewissen Komplexität realistisch sein. Umfangreiche Excel-Tabellen und Excel-basierte Berichte entstehen in der Praxis, indem die Anwenderinnen und Anwender Daten erfassen oder importieren, Berechnungen durch Zellbezüge herstellen, Filter einbauen, die Zellen individuell formatieren, Grafiken ergänzen und so weiter. Eine derartig komplexe Tabelle kann dann zum Beispiel als Vorlage dienen, um diese wiederum programmatisch zu generieren und dann die statischen Werte in der Tabelle durch Variablen zu ersetzen. In diesem Fall stammen die Daten der Anwendung aus Berechnungen, Datenbankabfragen et cetera. Daraus wird eine Tabelle oder ein Bericht im Excel-Format erstellt, die oder der dann wiederum durch die Anwender weiterverarbeitet werden kann. Um eine vorhandene Excel-Tabelle in C#-(VB-)Quellcode zu transformieren, gibt es das Tool APIMate, das kostenfrei für Windows und macOS aus dem Internet heruntergeladen werden kann [11].Jetzt bedarf es noch einer Datentabelle mit mehr als einer Handvoll Einträge. Als solche soll die Excel-Tabelle Financial Sample.xlsx von Microsoft dienen [12]. Es handelt sich um eine Tabelle mit 700 Datensätzen, sortiert in 16 Spalten und mit einer Filtermöglichkeit (Bild 6). Diese Excel-Tabelle soll mit C#-Quellcode transformiert werden. Der entsprechende Quellcode wird dann die Ausgangsbasis für die weiteren Arbeiten darstellen, zum Beispiel für das Ersetzen von statischen Werten durch Variablen, den Export der Daten in andere Formate und anderes mehr.
Ein Auszugaus Microsofts Datentabelle mit Finanzbeispielen(Bild 6)
Autor
Für eine Transformation starten Sie APIMate und öffnen die Excel-Tabelle. Im Tool können Sie einige Parameter für die Konvertierung einstellen, etwa die Anzeige von Kommentaren, die Aufnahme der using-Anweisungen und das Erzeugen von Methoden für verschiedene Speicherformate. Aktivieren Sie das Generieren von Methoden zum Speichern in den Formaten XLS, PDF und HTML. Der erstellte Quellcode wird direkt in der Programmiersprache C#, alternativ in Visual Basic angezeigt (Bild 7).

Transformationeiner Excel-Tabelle in C# mit APIMate(Bild 7)
Autor
Der Quellcode wird in das Projekt in Visual Studio übernommen. Alle Daten, das heißt die Werte in den einzelnen Zellen, alle Formatierungen, die Filter und auch die Einstellungen zum Drucklayout, die in Excel in der Ausgangstabelle vorgenommen wurden, werden nun über C#-Code erstellt. Scrollen Sie dazu durch die betreffende Klasse in Visual Studio.Wenn Sie jetzt – zum Beispiel durch einen Klick auf einen Button – die Methode CreateAndSaveFile() aus Listing 1 aufrufen, dann wird die Tabelle im Speicher erstellt und als Excel-, PDF- und HTML-Datei gespeichert, in diesem Fall im Dokumentenordner des Nutzers. Dafür stellt das API von FlexCel entsprechende Methoden und Klassen bereit. Beim Export in HTML lässt sich ergänzend ein Name für einen Unterordner für mögliche einzubettende Bilder übergeben. Die Tabelle enthält solche Elemente zunächst nicht.
Listing 1: Methode zum Speichern als XLS, PDF und HTML
public void CreateAndSaveFile() <br/>{ <br/> XlsFile xls = new XlsFile(true); <br/> CreateFile(xls); <br/><br/> //<span class="hljs-keyword">Save</span> the file <span class="hljs-built_in">as</span> XLS <br/> xls.<span class="hljs-keyword">Save</span>(<span class="hljs-keyword">Path</span>.Combine(Environment.GetFolderPath(<br/> Environment.SpecialFolder.Personal), <br/> <span class="hljs-string">"finanzen1.xlsx"</span>)); <br/><br/> //<span class="hljs-keyword">Save</span> the file <span class="hljs-built_in">as</span> Pdf <br/> <span class="hljs-built_in">using</span> (FlexCelPdfExport Pdf = <br/> new FlexCelPdfExport(xls, true)) <br/> { <br/> <span class="hljs-built_in">using</span> (FileStream PdfStream = new FileStream(<br/> <span class="hljs-keyword">Path</span>.Combine(Environment.GetFolderPath(<br/> Environment.SpecialFolder.Personal),<br/> <span class="hljs-string">"finanzen1.pdf"</span>), FileMode.OpenOrCreate)) <br/> { <br/> Pdf.BeginExport(PdfStream); <br/> Pdf.PageLayout = TPageLayout.Outlines; <br/> Pdf.ExportAllVisibleSheets(false, <br/> <span class="hljs-string">"My Pdf File"</span>); <br/> Pdf.EndExport(); <br/> } <br/> } <br/><br/> //<span class="hljs-keyword">Save</span> the file <span class="hljs-built_in">as</span> HTML <br/> <span class="hljs-built_in">using</span> (FlexCelHtmlExport Html = <br/> new FlexCelHtmlExport(xls, true)) <br/> { <br/> Html.<span class="hljs-keyword">Export</span>(<span class="hljs-keyword">Path</span>.Combine(Environment.<br/> GetFolderPath(Environment.SpecialFolder.<br/> Personal), <span class="hljs-string">"finanzen1.html"</span>), <span class="hljs-string">"images"</span>); <br/> } <br/>}
Das Ergebnis ist eine Excel-Tabelle, die sich in nichts von der Ausgangstabelle unterscheidet, eine PDF-Datei (Bild 8) und eine HTML-Datei (Bild 9). Beachten Sie: Der Export in PDF erfolgte durch eine native Funktion der Bibliothek ohne den Einsatz von Excel.

Der Exportder Tabelle in eine PDF-Datei(Bild 8)
Autor

Hier wurdedie Tabelle in HTML exportiert(Bild 9)
Autor
Werfen wir nun noch einen Blick auf den durch APIMate automatisch erzeugten Quellcode und die korrespondierende Excel-Tabelle. Bild 10 stellt die die beiden Elemente nebeneinander, das heißt eine jeweilige Excel-Zeile und den dazu erzeugten Quellcode.

Eine Zeilein Excel und der von APIMate dazu erzeugte C#-Code(Bild 10)
Autor
Berichte
FlexCel enthält auch einen Berichtsgenerator, der Excel als Berichtsdesigner verwendet. Das funktioniert so: Sie erstellen eine Vorlage für einen Bericht in Excel, schreiben einige Tags und führen den Bericht aus. FlexCel ersetzt diese Tags durch die Werte aus der Datenbank oder sonstige Berechnungen.Der große Vorteil eines Berichtsdesigners besteht darin, dass die Anwender den Bericht, zum Beispiel das Layout, selbst anpassen können und dazu kein Quellcode geschrieben werden muss. Dabei werden die Ebenen wie in Bild 11 unterschieden [13].
Die Trennung von Daten, Layout und Präsentation bei einemBericht(Bild 11)
Autor
- Data Model: Das Datenmodell. Die Angaben können in einer Datenbank oder in Listen von Objekten gespeichert werden.
- Interface: Diese Schicht verbindet die Daten- und die Präsentationsschicht.
- Presentation: Hier erfolgt die Definition aller visuellen Aspekte des Berichts, wie Datenposition, Schriftarten, Farben und so weiter.
- A1: <#Kunde.ID>
- B1: <#Kunde.Name>
- C1: <#Kunde.Ort>

Die Excel-Tabelledient als Präsentationsschicht für den Bericht(Bild 12)
Autor
Im zweiten Schritt erstellen Sie ein Windows-Forms-Projekt in Visual Studio mit Zugriff auf die FlexCel-Bibliothek und fügen beispielsweise in einer Click-Methode eines Buttons den Quellcode aus Listing 2 ein. Sie definieren eine Klasse Kunde mit drei Eigenschaften für ID, Name und Ort. Dazu kommt dann noch die Methode CreateReport(), die eine Liste von Kunden aufbaut. Anschließend erfolgt das Erstellen eines Berichts, der auf das eben definierte Template (report_kunden_template.xlsx) zugreift und das Ergebnis als neue Excel-Datei kunden.xls ausgibt. Starten Sie die Anwendung und führen Sie die Methode aus. Template und Daten aus der Anwendung werden miteinander „verbunden“ (Bild 13).
Listing 2: Excel-Datei aus Bericht heraus erstellen
<span class="hljs-keyword">public</span> <span class="hljs-keyword">class</span> <span class="hljs-title">Kunde</span> <br/>{ <br/> <span class="hljs-keyword">public</span> <span class="hljs-keyword">string</span> ID { <span class="hljs-keyword">get</span>; <span class="hljs-keyword">set</span>; } <br/> <span class="hljs-keyword">public</span> <span class="hljs-keyword">string</span> Name { <span class="hljs-keyword">get</span>; <span class="hljs-keyword">set</span>; } <br/> <span class="hljs-keyword">public</span> <span class="hljs-keyword">string</span> Ort { <span class="hljs-keyword">get</span>; <span class="hljs-keyword">set</span>; } <br/><br/>} <br/><br/><span class="hljs-function"><span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title">CreateReport</span>(<span class="hljs-params"></span>) </span><br/>{ <br/> <span class="hljs-keyword">var</span> Kunden = <span class="hljs-keyword">new</span> List&lt;Kunde&gt;(); <br/> Kunden.Add(<span class="hljs-keyword">new</span> Kunde() { ID = <span class="hljs-string">"1"</span>,<br/> Name = <span class="hljs-string">"Müller"</span>, Ort = <span class="hljs-string">"Bremen"</span> }); <br/> Kunden.Add(<span class="hljs-keyword">new</span> Kunde() { ID = <span class="hljs-string">"2"</span>,<br/> Name = <span class="hljs-string">"Maier"</span>, Ort = <span class="hljs-string">"Hamburg"</span> }); <br/> Kunden.Add(<span class="hljs-keyword">new</span> Kunde() { ID = <span class="hljs-string">"3"</span>,<br/> Name = <span class="hljs-string">"Schulz"</span>, Ort = <span class="hljs-string">"Berlin"</span> }); <br/> <span class="hljs-keyword">using</span> (FlexCelReport report =<br/> <span class="hljs-keyword">new</span> FlexCelReport(<span class="hljs-literal">true</span>)) <br/> { <br/> report.AddTable(<span class="hljs-string">"Kunde"</span>, Kunden); <br/> report.Run(Path.Combine(Environment.<br/> GetFolderPath(Environment.SpecialFolder.<br/> Personal), <span class="hljs-string">"report_kunden_template.xlsx"</span>),<br/> Path.Combine(Environment.GetFolderPath(<br/> Environment.SpecialFolder.Personal),<br/> <span class="hljs-string">"kunden.xlsx"</span>)); <br/> } <br/>}

Ein Bericht, aus Template und Daten erzeugt(Bild 13)
Autor
Drittens ändern Sie nun testweise die Vorlage, zum Beispiel die Farben, und starten die Anwendung erneut. Der Bericht wird nun auf der Basis der neuen Vorlage erstellt.Wie von Wunderhand fügen sich Vorlage und Daten zu einem neuen Bericht zusammen. Die Nutzer können damit das Layout des Berichts eigenständig ohne Änderungen am Quellcode anpassen. Wie der Aufbau der Excel-Vorlage für den Bericht erfolgt, das heißt die Definition der Tags, Referenzen et cetera, und wie man diese aus dem Quellcode der Anwendung adressiert, ist in der Dokumentation in den Abschnitten Reports Developer Guide und Reports Designer Guide des User Guide für FlexCel beschrieben [11].Berichte sind die flexiblere und anwenderfreundlichere Variante, um Excel-Dateien aus Quellcode zu erstellen. Hinsichtlich der Verarbeitungsgeschwindigkeit empfiehlt sich jedoch die direkte Anwendung des API der Bibliothek.
.NET bietet sehr viele Funktionen und gestattet es, über Quellcode einen sehr großen Teil an Excel-Funktionen umzusetzen. Dennoch ist das API einfach und kommt schnell zum gewünschten Ergebnis. Mit standardisierten Excel-Berichten können Anwender auf jeden Fall etwas anfangen. Statt komplizierter eigener Implementierungen oder unbekannter Berichtsgeneratoren genügt eine Schaltfläche Export nach Excel …, und der Anwender kommt damit garantiert zurecht.
Auf dem Server
Das obige Beispiel einer .NET-Applikation hat die Funktionen der Bibliothek gezeigt, die direkt im Client des Nutzers ausgeführt werden. In der Praxis wird es häufig so sein, dass die .NET-Anwendung auf dem Server läuft und die Clients der Anwender dann über das Netzwerk auf die Serveranwendung zugreifen. Während diese auf .NET basiert, besteht bei der Technologie der Client-Anwendungen freie Wahl. Hier kann es sich sowohl um eine Desktop-Anwendung als auch um eine mobile App oder eine Webanwendung handeln. Weder lokal noch auf dem Server wird eine Excel-Installation benötigt, um beispielsweise Excel-Tabellen zu erstellen oder zu bearbeiten.Große Tabellen und Laufzeitverhalten
In kleineren und mittelgroßen Excel-Tabellen ist die Verarbeitungsgeschwindigkeit kein besonderes Thema. In der Praxis kommen jedoch auch Tabellen mit mehr als 100 000 Zellen und gegebenenfalls mehreren Tausend Formeln zum Einsatz. Dann kann das Einfügen einer Zeile in der Mitte der Tabelle Excel schon einige Zeit beschäftigen. In einigen unglücklichen Fällen – wenn die Zellbezüge beispielsweise sehr umfangreich und komplex sind – kann das auch einen Absturz der Tabellenkalkulation mit sich bringen. Leistungsfähigere Hardware und die Nutzung der 64-Bit-Version sind zwei bekannte Lösungsansätze. In der Excel-Dokumentation findet sich ein eigener Abschnitt, um das Laufzeitverhalten einer Excel-Datei zu verbessern [14].Das Problem der Verarbeitungsgeschwindigkeit besteht auch, wenn man Excel-Dateien über Programmcode erstellt oder eine vorhandene Datei öffnen möchte. TMS FlexCel.NET verwendet verwalteten Code, das heißt, es gelten die Leistungsmerkmale der .NET-Plattform, zum Beispiel in Bezug auf die Nutzung der Speicherbereinigung. Wird eine Excel-Datei geöffnet, dann muss diese im Speicher gehalten werden. Der Speicherverbrauch steigt dann schnell an, wenn es sich um große und komplexe Dateien, zum Beispiel mit vielen Zellbezügen oder Grafiken, handelt. Ein Beispiel: Gibt es in einer Zelle einen Verweis auf eine Zelle in einem anderen Tabellenblatt, dann müssen bei Anpassungen beide Tabellenblätter komplett im Speicher gehalten werden.Die Dokumentation von TMS FlexCel nennt einige Ansätze, das Laufzeitverhalten zu verbessern [15]:- Virtueller Modus: Manchmal benötigen Sie nicht alle Funktionen einer Tabellenkalkulation, beispielsweise wenn Sie nur Werte aus Zellen lesen wollen. In diesen Fällen können Sie den virtuellen Modus einsetzen. Die Datei wird geöffnet und jede Zelle wird gelesen, jedoch nicht in das Speichermodell geladen. Am Ende erhalten Sie ein ExcelFile-Objekt, das keine Zellen enthält, aber Diagramme, Zeichnungen, Kommentare et cetera. Die Zellen können dann verwendet werden, während sie gelesen werden.
- 64-Bit: Es kann sinnvoll sein, FlexCel im 64-Bit-Modus zu verwenden. Das ist gerade bei einer Ausführung auf dem Server von Bedeutung. Die konkreten Auswirkungen bei einem Wechsel von 32- auf 64-Bit hängen auch von der konkreten .NET-Version und vom Aufbau der Excel-Datei ab.
- Hardware: Läuft die Anwendung auf dem Server und die Anwender greifen über Clients auf die Applikation und damit auch auf FlexCel zu, dann sollte beispielsweise die Server-CPU genügend Kerne bieten, damit die Anforderungen unabhängig im Prozessor bearbeitet werden können. Optimierungen an der Speicherbereinigung für die serverseitige Verwendung (siehe Dokumentation) können Verbesserungen bringen.
Fazit
Excel-Dateien zu erstellen ist eine häufige Anforderung für betriebswirtschaftliche Anwendungen, die intensiv mit Daten arbeiten. Dabei geht es oft nicht nur um einen bloßen Import oder Export der Daten, sondern es sind umfassende Tabellen mit Formeln, Zellbezüge oder komplette interaktive Berichte zu erstellen. Um das umzusetzen, empfiehlt sich am einfachsten eine fertige Bibliothek.Die hier vorgestellte Bibliothek TMS FlexCel Studio for.NET bietet sehr viele Funktionen und gestattet es, über Quellcode einen sehr großen Teil an Excel-Funktionen umzusetzen. Dennoch ist das API einfach und kommt schnell zum gewünschten Ergebnis. Mit standardisierten Excel-Berichten können Anwender auf jeden Fall etwas anfangen. Statt komplizierter eigener Implementierungen oder unbekannter Berichtsgeneratoren genügt eine Schaltfläche Export nach Excel …, und der Anwender kommt damit garantiert zurecht.
Fussnoten
- Excel-Funktionen (nach Kategorie), http://www.dotnetpro.de/SL2206FlexCel1
- Vorgehensweise: Zugreifen auf Office-Interop-Objekte (C#-Programmierleitfaden), http://www.dotnetpro.de/SL2206FlexCel2
- Was bei der serverseitigen Automatisierung von Office zu beachten ist, http://www.dotnetpro.de/SL2206FlexCel3
- Manipulate Excel Files via .NET APIs, http://www.dotnetpro.de/SL2206FlexCel4
- Spire.XLS, http://www.dotnetpro.de/SL2206FlexCel5
- Overview of Syncfusion Excel (XlsIO) library, http://www.dotnetpro.de/SL2206FlexCel6
- TMS FlexCel Studio for .NET, http://www.dotnetpro.de/SL2206FlexCel7
- Excel Compatibility for iOS, Android, Linux, macOS, UWP and More, http://www.dotnetpro.de/SL2206FlexCel8
- ExcelMapper, http://www.dotnetpro.de/SL2206FlexCel9
- GemBox.Spreadsheet, http://www.dotnetpro.de/SL2206FlexCel10
- Getting Started with FlexCel Studio for the .NET Framework, http://www.dotnetpro.de/SL2206FlexCel11
- Microsoft, Herunterladen der Excel-Finanzbeispielarbeitsmappe für Power BI, http://www.dotnetpro.de/SL2206FlexCel12
- FlexCel Reports Developer Guide, http://www.dotnetpro.de/SL2206FlexCel13
- Excel-Leistung: Verbesserung der Berechnungsleistung, http://www.dotnetpro.de/SL2206FlexCel14
- FlexCel Performance Guide, http://www.dotnetpro.de/SL2206FlexCel15
- TMS FlexCel for VCL & FMX, http://www.dotnetpro.de/SL2206FlexCel16