Wie man einen Bericht in Excel XML aus Delphi / Lazarus exportiert

2020-05-25

Ein Entwickler hat eine riesige Auswahl an Optionen, wenn die Aufgabe darin besteht, nach Excel aus Delphi oder Lazarus zu exportieren - es wurde teilweise in dem Artikel “Wie man einen Bericht nach XLS Biff8 aus Delphi exportierti” beschrieben und dort habe ich auch kurz erklärt, warum es eine schlechte Wahl ist. Und was ist dann eine gute Wahl? Nun, es ist besser, eine Datei im neuen (nun, relativ neuen) XML XLSX Format zu speichern.

"XML ist eine Technologie, die dazu entwickelt wurde, strukturierte Daten zu verwalten und diese Daten als für Menschen lesbare Textdatei anzuzeigen. XML ist mit Industriestandards konform und kann von vielen Datenbanken und Applikationen verarbeitet werden. Mit Hilfe von XML können viele Entwickler ihre eigenen angepassten Tags, Datenstrukturen und Schemas erstellen. Im Allgemeinen erleichtert XML die Definition, Übertragung, Validierung und Interpretation von Daten in verschiedenen Datenbanken, Applikationen und Organisationen erheblich."

Aber Microsoft wäre nicht Microsoft, wenn es nicht versuchen würde, traditionell "sein eigenes XML zu machen - mit Blackjack und Zellen!" Und so arbeitet Excel tatsächlich mit nicht einem, sondern zwei (!) XML-Standards für die Speicherung von Excel-Tabellen: einem älteren und einem korrekteren.

Wie ich schon oft erwähnt habe, können Sie mit FastReport Ihre Dokumente, Berichte und Daten aus Delphi und Lazarus in einer Vielzahl von Formaten speichern. Das Erstellen des Berichtes selbst ist ein Kinderspiel, Sie können es in früheren Artikeln sehen - das einzige, worauf ich hinweisen möchte, ist, dass Sie auf die Ausrichtung Ihrer Objekte achten müssen, damit die resultierenden Tabellen attraktiv und qualitativ sind. Also, wir haben zwei verschiedene (!) Exportfilter für Excel-XML. Schauen Sie sich das an!

Ruft das Menü " exportieren in XLSX XML

Wir sehen ein Vorschaufenster und eine Schaltfläche "Speichern".

"Hey, aber was kann ein einfacher Entwickler wie ich hier verwenden?" - fragen Sie und Sie haben absolut Recht. Die kurze Antwort ist 2007 XML, eine spätere Version, und weiter unten werde ich Ihnen die Gründe sagen.

Es ist klar, dass der Programmierer nie etwas tut, "nur weil er es will" - der Benutzer ist derjenige, der etwas will. Was ist also der Unterschied zwischen diesen beiden Formaten aus der Sicht des Anwenders, wenn er eine Excel-Tabelle aus der Anwendung erhalten möchte? Für den Benutzer ist dieser Unterschied in etwa derselbe wie zwischen rtf ohne Bilder und einem vollwertigen MS Word-Dokument - ersteres kommt im wirklichen Leben kaum vor. In einer einfachen XML-Datei gibt es keine Stile oder Bilder - nur eine Tabelle in XML. Aber als es erfunden wurde, gab es nicht viel Auswahl - es war ein großer Schritt nach vorne für MS Excel. Microsoft Excel 2007 XML kann Bilder speichern, es hat Stile usw. Es ist ein OOML-Container. Sie können sich hier in das Thema XML, das ab 2007 verwendet wird, vertiefen - es ist die ganze Welt!

Und wir werden nur die beiden Möglichkeiten des Speicherns in XML und XLSX XML vergleichen und entscheiden, welche besser zu verwenden ist und in welchen Fällen.

Der Export nach XML ist einfacher: Es werden nur Textobjekte exportiert. Bilder, Diagramme, Karten, Strichcodes, TfrxRichView-Formatierung, HTML-Tags und Hintergrundbilder gelangen nicht in die resultierende Excel-XML-Datei.

Wie üblich beschreibe ich im Folgenden, wie Sie das Speichern im Excel-XML-Format mit Hilfe eines Codes implementieren können, wenn Sie kein Vorschaufenster zeigen wollen oder müssen und die Möglichkeit haben, es zum Drucken zu senden. Das Fenster mit den Einstellungen für den Export in XML wird angezeigt. Ich habe diese beiden Fenster nebeneinander gelegt, um Ihnen die Möglichkeit zu geben, die Einstellungen zu vergleichen. Es ist nicht nur einfach - es ist ein Kinderspiel!

XLSX Excel-2007 Einstellung XLSX XML Excel Einstellung

Die FastReport-Tools helfen Ihnen bei der Auswahl, welche Seiten unseres Dokuments an Excel gesendet werden sollen. Bestimmte Seiten oder ein Seiten-Bereich.

Export-Einstellungen: bessere visuelle Übereinstimmung mit der Originalversion (WYSIWYG), Seitenumbrüche und fortlaufendes Dokument, das Kopf- und Fußzeilen überspringt.

Wie das Ergebnis aussehen wird: nicht aufteilen, Berichtsseiten verwenden, Druck auf übergeordnetem Blatt verwenden - jede TrfxReportPage in der Berichtsvorlage entspricht einem Blatt des Buches (vorausgesetzt, TfrxReportPage.PrintOnParent = False) oder durch eine bestimmte Anzahl von Zeilen aufteilen.

Nach dem Export öffnen: Die resultierende Datei wird sofort nach dem Export von Microsoft Excel geöffnet (oder von jeder anderen Software, die mit XLSX-Dateien arbeitet).

Speichern von XLSX XML in der Cloud 

Die resultierende XML-/XLSX-Datei kann als Datei mit der Erweiterung .xml im lokalen Speicher gespeichert, an FTP gesendet, per E-Mail verschickt oder in einen der Cloud-Speicher (Dropbox, OneDrive, Box.com, GoogleDrive) hochgeladen werden.

Vergleichen wir nun die resultierenden XLSX- und Excel-XML-Dateien

Tabelle XLSX XML enthält keine BilderXLSX Excel 2007 speichert Bilder und Barcodes

Der erste Screenshot ist das Ergebnis des Speicherns im XLSX-Format und wie wir sehen können, unterstützt dieses Format keine Daten, die komplexer sind als reiner Text. Aber der zweite Screenshot zeigt uns alle Möglichkeiten des XML-Formats, wie die volle Unterstützung von Bildern und Barcodes. Wenn wir über die Größe der Dateien sprechen, ist das Ergebnis ziemlich vorhersehbar: XLSX - 48,0kB, XML - 40,0kB.Tabelle XLSX mit Abbildungen

Schauen wir uns einmal genauer an, warum XLSX größer ist als XML. Als Grundlage wurden diese schönen Fische genommen. Dieses Dokument enthält eine Menge Text, tabellarische Daten und 30 Fotos. Zur besseren Übersichtlichkeit wollen wir es auch mit dem nicht-alterungsfähigen Excel 97 vergleichen, über das wir in einem anderen Artikel gesprochen haben.

Größe-Vergleich XLS XLSX XML-Excel 2007Größe-Vergleich XLS XLSX XML-Excel 2007Größe-Vergleich XLS XLSX XML-Excel 2007

Excel 97 - es ist ein binäres Format (biff8) und es hat keine Komprimierung, deshalb ist die Datei so groß. Anders als das spätere XML-Format unterstützt Excel 97 alle Arten von Bildern.

Excel-Tabelle (XML) - eine frühe Version von XLSX, bei der die Daten als einfache, einzelne, monolithische XML-Dateien gespeichert werden, was sie im Vergleich zu OOXML und den älteren Binärformaten von MS Office recht groß macht.

'Aber die Größe der Datei ist auf dem Screenshot minimal', - könnten Sie sagen. Die Antwort ist einfach: diese Größe ist für ein Dokument angegeben, in dem nur der Text angezeigt wird. Stellen Sie sich nun vor, dass dieses Format die Bilder unterstützt - das Dokument würde sehr viel Platz einnehmen, weil es noch keine Komprimierung gibt. Außerdem werden Inline-Elemente, wie z. B. Bilder, als binär kodierte Blöcke gespeichert, die nicht zur Anzeige zur Verfügung stehen.

Excel 2007 XLSX (XML) - Microsoft hat das Beste aus den bisherigen Formaten übernommen und die Dateikomprimierung implementiert. Die Größe des Dokuments ist ca. 50-75 % kleiner als in früheren Versionen.

Eingeschränkte Funktionen und mögliche Einschränkungen des XLSX-Formats von Excel 2007

Die Anzahl der Spalten erhöhte sich von 256 auf 16 384, die Anzahl der Zeilen in einem Blatt erhöhte sich von 65 536 auf 1.048 576. Berechnungen in großen Blättern mit vielen Formeln wurden dank der Unterstützung von mehreren Prozessoren und Multithread-Chipsätzen durch Excel 2007 beschleunigt. 

Wie man in XLSX und XML Excel direkt aus Delphi / Lazarus speichern kann:

Export nach XML

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
procedure TForm1.Button1Click(Sender: TObject);
begin
 {Generieren Sie einen Bericht. Der Bericht muss vor dem Export generiert werden}
 frxReport1.PrepareReport();
 {Stellen Sie den Bereich der zu exportierenden Seiten ein. Standardmäßig werden alle Seiten 
  des generierten Berichts exportiert} 
frxXMLExport1.PageNumbers := '2-3';
 {Stellen Sie ein, ob ein fortlaufendes Dokument erzeugt werden soll, das die Kopf- und Fußzeilen 
überspringt. Durch Aktivieren dieser Option wird TfrxXMLExport.ExportPageBreaks deaktiviert}
 frxXMLExport1.SuppressPageHeadersFooters := True;
{Stellen Sie ein, ob die Seitenumbrüche innerhalb des Blattes des Buches exportiert werden sollen, damit beim Drucken die Seiten den Seiten des erzeugten Berichts entsprechen}
frxXMLExport1.ExportPageBreaks := True;
 {Stellen Sie WYSIWYG ein}
 frxXMLExport1.Wysiwyg := True;
 {Setzen Sie die Reihenfolge der Dokumentaufteilung mit der Eigenschaft Split, die folgende Werte annehmen kann:
  ssNotSplit - erzeugt ein fortlaufendes Dokument;
  ssRPages - jedes Blatt des erzeugten Berichts entspricht dem Blatt des Buchs;
  ssPrintOnPrev - jedes Blatt von TfrxReportPage in der Berichtsvorlage entspricht einem Blatt des 
Buches (vorausgesetzt, dass TfrxReportPage.PrintOnParent = False);
  ssRowsCount - jedes Blatt hat die in der Eigenschaft TfrxXMLExport.RowsCount angegebene Anzahl von Zeilen.}
 frxXMLExport1.Split := ssNotSplit;
 {Stellen Sie ein, ob die resultierende Datei nach dem Export geöffnet werden soll}
 frxXMLExport1.OpenAfterExport := False;
{Stellen Sie ein, ob der Exportfortschritt angezeigt werden soll
  (zeigen, welche Seite gerade exportiert wird)}
 frxXMLExport1.ShowProgress := False;
 {Stellen Sie ein, ob ein Dialogfeld mit Exportfiltereinstellungen angezeigt werden soll}
 frxXMLExport1.ShowDialog := False;
{Stellen Sie den Namen der resultierenden Datei ein.}
 {Bitte beachten Sie, dass, wenn Sie den Dateinamen nicht festlegen und das Exportfilter-Dialogfeld deaktivieren,}
 {wird das Dialogfeld zur Auswahl des Dateinamens weiterhin angezeigt} 
frxXMLExport1.FileName := 'C:\Output\test.xls';
 {Den Bericht exportieren}
 frxReport1.Export(frxXMLExport1);
end;


 Export nach XLSX

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
procedure TForm1.Button2Click(Sender: TObject);
begin
 {Generieren Sie einen Bericht. Der Bericht muss vor dem Exportieren generiert werden}
 frxReport1.PrepareReport();
 {Stellen Sie den Bereich der zu exportierenden Seiten ein. Standardmäßig werden alle Seiten des 
generierten Berichts exportiert}
 frxXLSXExport1.PageNumbers := '2-3';
 {Stellen Sie ein, ob ein fortlaufendes Dokument erzeugt werden soll, das leere Zeilen, Kopf- und Fußzeilen überspringt (mit EmptyLines = False).
  Bei EmptyLines = True wird der Bericht so exportiert, wie er erzeugt wurde. Ohne die leeren Zeilen, Kopf- und Fußzeilen zu überspringen.
  Wenn Sie diese Option aktivieren, wird TfrxXLSXExport.SuppressPageHeadersFooters deaktiviert und umgekehrt)}
 frxXLSXExport1.EmptyLines := True;
 {Stellen Sie ein, ob die Seitenumbrüche innerhalb des Buchblattes exportiert werden sollen, damit beim Drucken die Seiten den Seiten des erzeugten Berichts entsprechen }
 frxXLSXExport1.ExportPageBreaks := True;
 {Stellen Sie WYSIWYG ein}
 frxXLSXExport1.Wysiwyg := True;
{Stellen Sie ein, ob nur der Inhalt von Datenbändern exportiert werden soll}
 frxXLSXExport1.DataOnly := False;
 {Setzen Sie die Reihenfolge der Dokumentaufteilung:
  Bei eingeschalteter SingleSheet-Option werden alle Seiten des Dokuments auf ein Blatt gelegt
  frxXLSXExport1.SingleSheet := True;
  Wenn Sie den Wert auf ChunkSize setzen, wird jedes Blatt eine bestimmte Anzahl von Zeilen haben.
  In diesem Fall sollte SingleSheet auf False gesetzt werden
  frxXLSXExport1.ChunkSize := 50;
  Wir stellen die Standardreihenfolge ein, wenn jedes Blatt des generierten Berichts einem Blatt des Buches entspricht }
 frxXLSXExport1.SingleSheet := False;
 frxXLSXExport1.ChunkSize := 0;
 {Stellen Sie ein, ob die resultierende Datei nach dem Export geöffnet werden soll}
 frxXLSXExport1.OpenAfterExport := False;
 {Stellen Sie ein, ob der Exportfortschritt angezeigt werden soll
  (zeigen, welche Seite gerade exportiert wird)}
 frxXLSXExport1.ShowProgress := False;
 {Einstellen, ob ein Dialogfeld mit Exportfiltereinstellungen angezeigt werden soll}
 frxXLSXExport1.ShowDialog := False;
 {Stellen Sie den Namen der resultierenden Datei ein.}
 {Bitte beachten Sie, dass, wenn Sie den Dateinamen nicht festlegen und das Exportfilter-Dialogfeld deaktivieren,}
 {wird das Dialogfeld zur Auswahl des Dateinamens weiterhin angezeigt }
 frxXLSXExport1.FileName := 'C:\Output\test.xlsx';
 {Den Bericht exportieren}
 frxReport1.Export(frxXLSXExport1);
end;

Jetzt wissen wir, wie man in XLSX und XML Excel 2007 (und neuer) von Delphi und Lazarus aus speichert und welches Format besser zu wählen ist!

20. November 2024

Lokalisierung und Ändern von Sprachen in FastReport VCL

FastReport VCL unterstützt 40 Sprachen für die Schnittstellenlokalisierung und ermöglicht es Ihnen, die Sprache im laufenden Betrieb über Menüs oder Code ohne Neukompilierung zu ändern.
11. Dezember 2023

Neuer S3 (Amazon) Transport in FastReport VCL

In diesem Artikel werden wir uns den neuen Transport in S3 (Amazon) für FastReport VCL ansehen, bei dem es sich um einen Objektspeicher für Dateien und Buckets handelt.
26. September 2023

Installation von FastReport- und FastCube-Komponenten in Lazarus

Anleitung zur Installation von FastReport in Lazarus für verschiedene Betriebssysteme mit einem Vergleich der Trial, Professional-Editionen.
Fast Reports
  • 800-985-8986 (Englisch, die USA)
  • +4930568373928 (Deutsch)
  • +55 19 98147-8148 (Portugiesisch)
  • info@fast-report.com
  • 66 Canal Center Plaza, Ste 505, Alexandria, VA 22314

© 1998-2024 Fast Reports Inc.