FPSpreadsheet/de
│
Deutsch (de) │
English (en) │
español (es) │
français (fr) │
polski (pl) │
русский (ru) │
Die fpSpreadsheet Bibliothek bietet einen praktischen Weg, Tabellenkalkulations-Dokumente in verschiedenen Formaten zu erzeugen und zu lesen. Die Bibliothek ist sehr flexibel gehalten und kann daher leicht erweitert werden, um weitere Formate zu unterstützen.
API Dokumentation
API Referenz
Eine Referenz im CHM-Format befindet sich hier:
http://lazarus-ccr.svn.sourceforge.net/viewvc/lazarus-ccr/components/fpspreadsheet/fpspreadsheet.chm
Formeln
Zwei Arten von Formeln werden von FPSpreadsheet unterstützt: String-Formeln und RPN-Formeln. String-Formeln werden als Zeichenketten geschrieben genau wie in der Office-Anwendung, zum Beispiel "ROUND(A1+B1)", während RPN-Formeln in Umgekehrter Polnischer Notation (Reverse Polish Notation) geschrieben werden, zum Beispiel: A1, B1, Add, 0, ROUND
RPN-Formeln
Ein Beispiel für die Verwendung eingebauter Routinen:
<delphi>
// Schreibt die Formel E1 = ABS(A1) SetLength(MyRPNFormula, 2); MyRPNFormula[0].ElementKind := fekCell; MyRPNFormula[0].Col := 0; MyRPNFormula[0].Row := 0; MyRPNFormula[1].ElementKind := fekABS; MyWorksheet.WriteRPNFormula(0, 4, MyRPNFormula);
// Schreibt die Formel F1 = ROUND(A1, 0) SetLength(MyRPNFormula, 3); MyRPNFormula[0].ElementKind := fekCell; MyRPNFormula[0].Col := 0; MyRPNFormula[0].Row := 0; MyRPNFormula[1].ElementKind := fekNum; MyRPNFormula[1].DoubleValue := 0.0; MyRPNFormula[2].ElementKind := fekROUND; MyWorksheet.WriteRPNFormula(0, 5, MyRPNFormula);
</delphi>
Eingebaute Routinen
ABS - Gibt den absoluten Wert einer Zahl zurück. Benötigt wird 1 Argument. Beispiel: ABS(-1) = 1
ROUND - Rundet eine Zahl auf eine bestimmte Anzahl von Dezimalstellen. Benötigt 2 Argumente, erstens die zu rundende Zahlund zweitens die Anzahl der Nachkommastellen. Dieses zweite Argument ist standardmäßig auf 0 und kann auch negativ werden.
Packages
FPSpreadsheet ist zum vereinfachten Gebrauch in folgende zwei Packages aufgeteilt:
laz_fpspreadsheet.lpk
Fügt alle nötigen Dateien hinzu, um 'fpspreadsheet' in Ihren Lazarus-Projekten zu verwenden. Nachdem Sie dieses Package als Anforderung in Ihrem Projekt hinzugefügt haben, ergänzen Sie die uses-Klausel der betroffenen Units mit "fpspreadsheet".
laz_fpspreadsheet_visual.lpk
Stellt eine Reihe visueller Komponenten zur Verfügung, die die Möglichkeiten von FPSpreadsheet erweitern. Dazu gehört das Bearbeiten und Anzeigen von Daten aus Ihren LCL-Anwendungen heraus.
Die folgenden LCL Komponenten werden mit diesem Package installiert:
Beispiele
Erzeugen Sie ein Projekt das die fpspreadsheet-Bibliothek benutzt, indem Sie das fpspreadsheet_pkg Package zu Ihrem Lazarus-Projekt hinzufügen, oder geben Sie das Basisverzeichnis von fpspreadsheet in Ihren Compileroptionen an, wenn Sie eine andere IDE verwenden.
Excel 5 Beispiel
<delphi> { excel5demo.dpr
Demonstriert, wie man eine Excel 5.x Datei schreibt unter Verwendung der fpspreadsheet-Bibliothek
Sie können das Ausgabe-Format festlegen indem Sie die Konstante OUTPUT_FORMAT ändern.
AUTOR: Felipe Monteiro de Carvalho } program excel5demo;
{$mode delphi}{$H+}
uses
Classes, SysUtils, fpspreadsheet, fpsallformats, fpspreadsheet_pkg;
const OUTPUT_FORMAT = sfExcel5;
var
MyWorkbook: TsWorkbook; MyWorksheet: TsWorksheet; MyFormula: TsRPNFormula; MyDir: string;
begin
// Initialisierung MyDir := ExtractFilePath(ParamStr(0));
// Create the spreadsheet MyWorkbook := TsWorkbook.Create; MyWorksheet := MyWorkbook.AddWorksheet('My Worksheet');
// Write some number cells MyWorksheet.WriteNumber(0, 0, 1.0); MyWorksheet.WriteNumber(0, 1, 2.0); MyWorksheet.WriteNumber(0, 2, 3.0); MyWorksheet.WriteNumber(0, 3, 4.0);
// Schreibt die Formal E1 = A1 + B1 // oder, in RPN: A1, B1, + SetLength(MyFormula, 3); MyFormula[0].ElementKind:=fekCell; {A1} MyFormula[0].Col := 0; MyFormula[0].Row := 0; MyFormula[1].ElementKind:=fekCell; {B1} MyFormula[1].Col := 1; MyFormula[1].Row := 0; MyFormula[2].ElementKind:=fekAdd;; {+} MyWorksheet.WriteRPNFormula(0, 4, MyFormula);
// Erzeugt ein neues Arbeitsblatt MyWorksheet := MyWorkbook.AddWorksheet('My Worksheet 2');
// Schreibt einige Zeichen in Zellen MyWorksheet.WriteUTF8Text(0, 0, 'Erster'); MyWorksheet.WriteUTF8Text(0, 1, 'Zweiter'); MyWorksheet.WriteUTF8Text(0, 2, 'Dritter'); MyWorksheet.WriteUTF8Text(0, 3, 'Vierter');
// Save the spreadsheet to a file MyWorkbook.WriteToFile(MyDir + 'test' + STR_EXCEL_EXTENSION, OUTPUT_FORMAT); MyWorkbook.Free;
end. </delphi>
Iteration durch alle Arbeitsblätter
<delphi> var
MyWorkbook: TsWorkbook; MyWorksheet: TsWorksheet; i: Integer;
begin
// Hier wird MyWorkbook aus einer Datei geladen oder neu erzeugt for i := 0 to MyWorkbook.GetWorksheetCount() - 1 do begin MyWorksheet := MyWorkbook.GetWorksheetByIndex(i); // Tue etwas mit MyWorksheet end;
</delphi>
Daten aus einer Datenbank in eine Tabellenkalkulation übernehmen
Beachten Sie, dass es sich hier um nicht getesteten Meta-Code handelt.
<delphi> program db5xls;
{$mode delphi}{$H+}
uses
Classes, SysUtils, // alle notwendigen Datenbank-Units hinzufügen fpspreadsheet, fpsallformats, fpspreadsheet_pkg;
const OUTPUT_FORMAT = sfExcel5;
var
MyWorkbook: TsWorkbook; MyWorksheet: TsWorksheet; MyDatabase: TSdfDataset; MyDir: string; i, j: Integer;
begin
// Initialisierung MyDir := ExtractFilePath(ParamStr(0)); // die Datenbank öffnen MyDatabase := TSdfDataset.Create; MyDatabase.Filename := 'test.dat'; // hier die Tabellenbeschreibung hinzufügen MyDatabase.Active := True;
// Create the spreadsheet MyWorkbook := TsWorkbook.Create; MyWorksheet := MyWorkbook.AddWorksheet('My Worksheet'); // die Feldnamen schreiben for i := 0 to MyDatabase.Fields.Count - 1 do MyWorksheet.WriteUTF8Text(0, i, MyDatabase.Field[i].FieldName);
// Write all cells to the worksheet MyDatabase.First; j := 0; while not MyDatabase.EOF do begin for i := 0 to MyDatabase.Fields.Count - 1 do MyWorksheet.WriteUTF8Text(j + 1, i, MyDatabase.Field[i].AsString);
MyDatabase.Next; Inc(j); end;
// die Datenbank schließen MyDatabase.Active := False; MyDatabase.Free;
// Save the spreadsheet to a file MyWorkbook.WriteToFile(MyDir + 'test' + STR_EXCEL_EXTENSION, OUTPUT_FORMAT); MyWorkbook.Free;
end. </delphi>
Konvertierung zwischen zwei Tabellenkalkulationsformaten
Beachten Sie, dass es sich hier um nicht getesteten Meta-Code handelt.
<delphi> program ods2xls;
{$mode delphi}{$H+}
uses
Classes, SysUtils, fpspreadsheet, fpsallformats, fpspreadsheet_pkg;
const
INPUT_FORMAT = sfOpenDocument; OUTPUT_FORMAT = sfExcel8;
var
MyWorkbook: TsWorkbook; MyDir: string;
begin
// Initialisierung MyDir := ExtractFilePath(ParamStr(0)); // Convert the spreadsheet MyWorkbook := TsWorkbook.Create; try MyWorkbook.ReadFromFile(MyDir + 'test.ods', INPUT_FORMAT); MyWorkbook.WriteToFile(MyDir + 'test.xls', OUTPUT_FORMAT); finally MyWorkbook.Free; end;
end. </delphi>
Verwendung von Formatierungsoptionen
Die Formatierung wird unabhängig vom Text gesetzt wie im folgenden Beispiel:
<delphi>
// Erzeugt einen fett geschriebenen Text MyWorksheet.WriteUTF8Text(0, 0, 'First'); MyWorksheet.WriteUsedFormatting(0, 0, [uffBold]);
</delphi>
Download
Subversion
Sie können FPSpreadsheet mit dem folgenden Befehl herunterladen unter Verwendung von Subversion:
svn co https://lazarus-ccr.svn.sourceforge.net/svnroot/lazarus-ccr/components/fpspreadsheet fpspreadsheet
Aktueller Fortschritt
Progress by supported format:
Format | Supports multiple sheets? | Unterstützt Unicode? | Reader Progress | Writer Progress | Text | Number | String Formel | RPN Formel |
---|---|---|---|---|---|---|---|---|
Excel 2.x | Nein | Nein** | Working | Working | Working | Working | Nicht implementiert | Working |
Excel 3.0 | Nein | Nein** | Nicht implementiert | Nicht implementiert | Nicht implementiert | Nicht implementiert | Nicht implementiert | Nicht implementiert |
Excel 4.0 | Nein | Nein** | Nicht implementiert | Nicht implementiert | Nicht implementiert | Nicht implementiert | Nicht implementiert | Nicht implementiert |
Excel 5.0 (Excel 5.0 und 95) | Ja | Nein** | Working* | Working | Working | Working | Nicht implementiert | Working |
Excel 8.0 (Excel 97, 2000, XP und 2003) | Ja | Ja | Working* | Working | Working | Working | Nicht implementiert | Nicht implementiert |
Microsoft OOXML | Ja | Ja | Nicht implementiert | Nicht implementiert | Nicht implementiert | Nicht implementiert | Nicht implementiert | Nicht implementiert |
OpenDocument | Ja | Ja | Working | Working | Working | Working | Nicht implementiert | Nicht implementiert |
(*) Some cell could be returned blank due missing or non ready implemented number and text formats.
(**) In formats which don't support Unicode the data is stored by default as ISO 8859-1 (Latin 1). You can change the encoding in TsWorkbook.Encoding. Note that FPSpreadsheet offers UTF-8 read and write routines, but the data might be converted to ISO when reading or writing to the disk. Be careful that characters which don't fit selected encoding will be lost in those operations. The remarks here are only valid for formats which don't support Unicode.
Fortschritt der Formatierungsoptionen
Einige Formatierungsoptionen wurden hinzugefügt, aber sie sind noch nicht für alle Formate implementiert:
Format | Textrotation | Fett |
---|---|---|
Excel 2.x | Nicht implementiert | Nicht implementiert |
Excel 3.0 | Nicht implementiert | Nicht implementiert |
Excel 4.0 | Nicht implementiert | Nicht implementiert |
Excel 5.0 (Excel 5.0 und 95) | - | - |
Excel 8.0 (Excel 97, 2000, XP und 2003) | Working | Working |
Microsoft OOXML | Nicht implementiert | Nicht implementiert |
OpenDocument | Working | Working |
Changelog
Jan 2009
- Implemented a cross-platform support for OLE file. Now Excel 5.0 files can be created in any operating system.
- Adds read support for Excel 2.1
Feb 2008
- Initial commit to lazarus-ccr with write support for Excel 2.1, Excel 5.0 (Windows only) and experimental OOXML and OpenDocument
Lizenz
LGPL with static linking exception. Dies ist die selbe Lizenz wie sie von der Lazarus Component Library verwendet wird.
Siehe auch
Externe Links
- Microsoft OLE Document Format - http://sc.openoffice.org/compdocfileformat.pdf
- Excel-Dateiformat-Beschreibung - http://sc.openoffice.org/excelfileformat.pdf