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:
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.
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!
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).
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.
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).
Unser Demo-Dokument mit Bildern (Fischen) in Biff8 XLS. Jedes Bild ist in einer eigenen Zelle platziert.
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