Wie erstellt man eine Datei in Excel 97 (2000, XP) - XLS aus Delphi / C++Builder / Lazarus?

2020-05-18

Ach, es ist ein ewiges Thema - das Erstellen einer Excel-Tabelle aus Delphi heraus.
Excel-Tabellen gehören heute zu den Standards in der Welt und für Programme, auch einfache, ist es häufig erforderlich, die Daten als Tabellen auszugeben und Berichte in die Tabelle zu übertragen. Dabei ist zu beachten, dass das XLS-Format bereits veraltet ist und es sich um ein Microsoft-Excel-internes Format namens Biff8 handelt (die ganze Welt mit ihren eigenen Verbindungen zwischen auf den ersten Blick unverbundenen Entitäten, Zellen, endlosen Tabs und Seiten mit Dateiabschnitten in einem Hardcore-Binärformat). Es gibt aber Firmen, Kunden, die eine solche Anforderung haben. Es wäre schön, wenn man diesen Kunden sofort warnen könnte, dass dieses Format NICHT für wirklich große Daten geeignet ist - schauen Sie sich das an:

"Excel hat Grenzen für die Datenmenge, die eine Zelle enthalten kann: Für Excel BIFF 8-Dateien liegt diese Grenze bei 32.767 Zeichen, so dass (theoretisch) 200+ Zeichen kein Problem darstellen sollten. Bei längeren Zeichenfolgen werden diese Daten jedoch in der BIFF-Datei über mehrere Blöcke mit Fortsetzungsdatensätzen gehalten. Bei BIFF-5-Dateien (Excel 95) liegt die Grenze bei 2084 Byte pro Block; bei BIFF-8-Dateien (Excel 97 und höher) liegt die Grenze bei 8228 Byte. Datensätze, die länger als diese Grenzen sind, müssen in CONTINUE-Blöcke aufgeteilt werden."

– Die Anzahl der Spalten, Zeilen und Daten ist dort begrenzt. Es ist besser, etwas Neues zu verwenden, und in einem anderen Artikel werde ich Ihnen sagen, wie Sie in Delphi im XML-Format XLSX speichern können (viel besseres Format - obwohl immer noch Excel).

Aber wenn Sie etwas Verrücktes wollen und die Formatbeschränkungen Sie nicht erschreckt haben, lassen Sie uns weiter einige Lösungen überprüfen:

  1. XLS-Tabellenausgabe direkt aus StringGrid per OLE / OLE-Container - diese Methode hat ein paar unangenehme Momente: Sie müssen auf jeden Fall Microsoft Excel auf Ihrem Computer installiert haben (wir sind keine Piraten - Sie müssen eine Lizenz kaufen!); die Bit-Architektur Ihres Systems, das installierte MS Office-Paket und Ihr kompiliertes Programm sollten übereinstimmen (Sie können sich gar nicht vorstellen, wie viele unvergessliche Stunden der Fehlersuche z.B. eine 32-Bit-Version von Office auf einem 64-Bit-System liefern kann!); Ihre Tabellenkalkulation sollte klein sein (wenn Sie mit großen Daten direkt im Speicher arbeiten, stürzt OLE sofort ab und bringt sowohl Excel als auch Ihre Anwendung zum Absturz) und selbst für dieses kleine Programm sollten Sie genügend Zeit haben. Der Datenübertragungsprozess mit OLE ist meditativ und mag keine Hektik. Sie werden viele Abende damit verbringen, nach "delphi ole excel container save file" zu googeln. 
  2. Okay, stellen wir uns vor, Sie wollen alles auf eine erwachsene Art und Weise machen - und große Datenmengen an das XLS senden. Dann helfen uns alle möglichen Bibliotheken, um direkt ins XLS zu schreiben - zum Beispiel TXLSFile. Diese Methode hat aber auch ein paar Nachteile. Es ist z.B. nicht so, dass es nicht möglich ist, Bilder, Grafiken und Barcodes in Zellen zu platzieren oder die Zellränder anzubringen - aber es wird, sagen wir mal, einige Mühe kosten. 
  3. Oder TMS FlexCel. Sie können einen Bericht in TMS FlexCel mit einem Bild und ohne Code erstellen. Selbst wenn Sie es in Code machen wollen, haben sie ein Tool, das den Code generiert! *
  4. Was sollen wir also tun? Wie immer in diesem Blog, haben wir eine Lösung - und das ist FastReport VCL! Zuerst erstellen Sie ganz einfach mit Hilfe der maximal angenehmen visuellen Schnittstelle ein Dokument oder einen Bericht (Sie können es nennen, wie Sie wollen - sogar einen Katalog für Ihre Händler - und das ist kein Witz, die Leute machen alles Mögliche). Dann exportieren Sie das Endergebnis so, wie es ist - nach Excel! Nutzen Sie auch die Empfehlungen zur Berichtserstellung - machen Sie daraus gleich eine TABELLE, "ordentlich am Lineal" - natürlich wird FastReport versuchen, die sich überschneidenden Objekte in die Tabelle einzupassen - aber Sie können bis zu 9 (!) Zellen aus einem Paar von Objekten bekommen, das Ergebnis wird Ihnen nicht gefallen! 

Erstellen der XLS-Datei aus Delphi mit FastReport 

Also, Ihr Dokument enthält große Tabellen, mehrstufige Listen, Illustrationen, Karten, Barcodes und Sie denken, wie man sie nach Excel übertragen kann? 
Ich werde mich hier nicht noch einmal mit der Erstellung eines Berichts aufhalten - fügen Sie die Komponenten TfrxReport, TfrxPDFExport und TButton in das Formular ein, schreiben 

1
frxReport1.ShowReport();

Sie für die Schaltfläche, erstellen Sie einen Bericht und führen Sie ein Ergebnisvorschaufenster aus. 

Wir können ein Vorschaufenster und eine Schaltfläche zum Speichern sehen.

Wählen Sie Speichern in Excel 97/2000 / XP-Datei...

Klicken Sie auf die Excel 97/2000/XP-Datei (eine andere Möglichkeit, das zu implementieren, finden Sie weiter unten mit einem Code, wenn Sie direkt als biff8 speichern möchten und 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 XLS wird angezeigt.

Wir erinnern uns, dass die Berichte in FastReport in Seiten unterteilt sind, richtig? Was sollen wir damit in Excel machen? Und hier ist das!

XLS-TabelleneinstellungenSpeichern von biff8 XLS in der Cloud

Mit den FastReport-Tools können Sie auswählen, welche Seiten unseres Dokuments an Excel gesendet werden sollen, bestimmte Seiten oder ein Bereich.

Und grundsätzlich, wie das Ergebnis aussehen wird: in Seiten aufteilen, die ursprüngliche Form belassen, alles auf einer Seite anordnen oder in Teile mit einer bestimmten Anzahl von Zeilen aufteilen.

Sie können festlegen, wo die Excel-Datei gespeichert werden soll (lokaler Speicher, als E-Mail versenden oder in die Cloud hochladen).

Nach dem Export öffnen - die resultierende Datei wird von Microsoft Excel sofort nach dem Export geöffnet.

Sie können sie als Datei mit der Erweiterung .xls im lokalen Speicher speichern, als E-Mail versenden oder in die Cloud hochladen (Dropbox, OneDrive, Box.com, GoogleDrive).

biff8 XLS service informationen setXLS biff8 PasswortschutzXLS biff8 zusätzliche Einstellungen

Service-Informationen, die auch in die Excel-Datei übernommen werden: Titel, Autor, Schlüsselwörter, Dokumentversion, Anwendungen, Kategorie, Manager und Dateikommentar.

Schutz - Passwortschutz des Dokuments (Sie können optional eine Bestätigung einstellen).

Wenn Sie eine nicht leere Kennwortzeichenfolge einstellen, wird die generierte Datei mit einem Kennwort geschützt. Das Kennwort wird immer in Unicode-Zeichen geschrieben und muss kürzer als 256 Unicode-Zeichen sein.

Optionen - Einrichten des Dokuments für eine größere visuelle Übereinstimmung mit der Originalversion (WYSIWYG), Exportieren von Bildern und Fotos in die Tabellenkalkulation, Anzeigen von Zellrändern, Anpassen der Seitengröße, Löschen von leeren Zeilen (sehr wichtige Option zum Platzsparen), Exportieren von Formeln.

Wenn Sie solche detaillierten Parameter nicht einstellen müssen, können Sie einfach alles in der Standardeinstellung belassen.

Senden an Excel(Biff8) aus Delphi / Lazarus Code

Direktes Speichern von Biff8 XLS aus Delphi/Lazarus
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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
procedure TForm1.Button1Click(Sender: TObject);
begin
 {Generieren Sie einen Bericht. Der Bericht muss vor dem Export generiert werden}
 frxReport1.PrepareReport();
 {Legen Sie den Bereich der zu exportierenden Seiten fest. Standardmäßig werden alle Seiten des generierten Berichts exportiert}
 frxBIFFExport1.PageNumbers := '2-3';
 {Legen Sie die Aufteilungsreihenfolge fest:
  bei eingeschalteter SingleSheet-Option befinden sich alle Seiten des Dokuments auf einem Blatt
  frxBIFFExport1.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
  frxBIFFExport1.ChunkSize := 50;
  Wir stellen die Standardreihenfolge ein, wenn jedes Blatt des erzeugten Berichts einem Blatt des Buches entspricht}
 
frxBIFFExport1.SingleSheet := False;
 frxBIFFExport1.ChunkSize := 0;
 {Einstellen, ob die Ergebnisdatei nach dem Export geöffnet werden soll}
 frxBIFFExport1.OpenAfterExport := False;
 {Einstellen, ob der Exportfortschritt angezeigt werden soll
  (anzeigen, welche Seite gerade exportiert wird)}
 frxBIFFExport1.ShowProgress := False;
 {Einstellen, ob ein Dialogfeld mit Exportfiltereinstellungen angezeigt werden soll}
 frxBIFFExport1.ShowDialog := False;
{Legen Sie den Namen der Ergebnisdatei fest.} 
{Bitte beachten Sie, dass, wenn Sie den Dateinamen nicht festlegen und das Dialogfeld für den 
Exportfilter deaktivieren,}
{wird der Dialog zur Auswahl des Dateinamens weiterhin angezeigt}
 frxBIFFExport1.FileName := 'C:\Output\test.xls';
{Füllen Sie die entsprechenden Felder der Registerkarte Information aus}
 frxBIFFExport1.Title := 'Your Title';
 frxBIFFExport1.Author := 'Your Name';
 frxBIFFExport1.Keywords := 'Your Keywords';
 frxBIFFExport1.Revision := 'Your Revision';
 frxBIFFExport1.AppName := 'Your Application';
 frxBIFFExport1.Subject := 'Your Subject';
 frxBIFFExport1.Category := 'Category Name';
 frxBIFFExport1.Company := 'Company Name';
 frxBIFFExport1.Manager := 'Manager Name';
 frxBIFFExport1.Comment := 'Your Comment';
 {Füllen Sie das Passwortfeld der Registerkarte "Schutz" aus}
 frxBIFFExport1.Password := 'User Password';
 {Einstellen der Dokumenteigenschaften (Registerkarte Optionen)}
 {Die WYSIWYG-Eigenschaft ist mit Inaccuracy <= 2 aktiviert, der Standardwert ist 10}
 frxBIFFExport1.Inaccuracy := 10;
 {Einstellen, ob Bilder exportiert werden sollen}
 frxBIFFExport1.Pictures := True;
 {Einstellen, ob Gitterlinien angezeigt werden sollen}
 frxBIFFExport1.GridLines := True;
 {Einstellen, ob Seiten skaliert werden sollen}
 frxBIFFExport1.FitPages := False;
 {Einstellen, ob leere Zeilen gelöscht werden sollen}
 frxBIFFExport1.DeleteEmptyRows := False;
 {Einstellen, ob Formeln exportiert werden sollen}
 frxBIFFExport1.ExportFormulas := True;
 {Exportieren Sie den Bericht}
 frxReport1.Export(frxBIFFExport1);
end;

Was sind die Nachwirkungen der Verwendung dieser Option zum Erstellen von Excel-Tabellen aus Delphi? Erstens ist es viel schneller und zuverlässiger als das Schreiben von XLS Biff8 mit OLE-Container (Sie können selbst vergleichen); es hat mehr Möglichkeiten (es sei denn, natürlich, Sie müssen nicht einfach ein StringGrid 100x100 nach Excel exportieren, welches garantiert auf einem Computer ohne die Fähigkeit zur Aktualisierung installiert ist); es ist plattformunabhängig (Linux-Anwendungen, die in Lazarus gemacht wurden, werden leicht XLS generieren - und dann können Sie sie in etwas wie Open Office / Libre Office öffnen); Formatierung, Texteigenschaften, Farben, Bilder, Barcodes, Karten, grafische Primitive, die aus dem Bericht in die resultierende Excel-Tabelle exportiert werden, werden gespeichert (aber beachten Sie, dass Libre Office die Bilder nicht anzeigt, im Gegensatz zu MS Excel).

 XLS biff8 Tabelle mit Abbildungen

Unser Demo-Dokument mit Bildern (Fischen) in Biff8 XLS. Jedes Bild ist in einer eigenen Zelle platziert.

Bericht mit Karte in XLS biff8

Bericht mit Karten in Excel XLS (biff8). Einige Zellen wurden zusammengeführt.

Aber es gibt Einschränkungen - bedingt durch das gewählte Format selbst! Die Anzahl der Zeilen und Spalten, die Sie auf einer Seite der Excel-Tabelle exportieren können, ist begrenzt - hier ein Ausschnitt aus dem Code:

1
2
BiffMaxRow = $fffe;
BiffMaxCol = $fe; 

Andernfalls würde es beim Öffnen in MS Excel abstürzen und die Datei ließe sich nicht öffnen. Ich möchte Sie daran erinnern, dass dieses Format nicht mehr weiterentwickelt wird und schon lange veraltet ist. Zum Glück hat Microsoft weitergemacht und (natürlich etwas später als FastReports) die Vorteile von XML als Basis für ein Speicherformat erkannt. Im nächsten Artikel werden wir Ihnen erzählen, wie Sie Excel XML Datei aus Delphi / Lazarus speichern können. 

*Vielen Dank an meinen guten Freund Bruno Fierens vom TMS software team für Hilfe und Korrektur in diesem Artikel!

Codeless fishfacts demo, generiert die Fischfaktenbilder in den Excel-Dateien
http://www.tmssoftware.biz/flexcel/doc/vcl/samples/delphi/reports/range-reports/index.html
 
Um es mit Code zu machen, würden Sie APIMate verwenden, wie hier erwähnt:
http://www.tmssoftware.biz/flexcel/doc/vcl/guides/getting-started.html#2-creating-a-more-complex-file-with-code

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.
9. November 2023

Bericht in C# in FastReport Cloud erstellen

In diesem Artikel zeigen wir Ihnen anhand eines Beispiels, wie Sie mit FastReport Cloud SDK Berichte erstellen und in ein beliebiges Format exportieren können.
4. Oktober 2023

Erstellen einer Bericht aus einer ASP.NET Core Anwendung mit FastReport.Core.Skia

Wir erklären Ihnen, wie Sie mit FastReport einen Bericht unter Windows und Linux erstellen.Kern.Skia und ein privater NuGet-Server.
Fast Reports
  • 800-985-8986 (Englisch, die USA)
  • +4930568373928 (Deutsch)
  • +55 19 98147-8148 (Portugiesisch)
  • info@fast-report.com
  • 901 N Pitt Str #325 Alexandria VA 22314

© 1998-2024 Fast Reports Inc.