FPSpreadsheet/de: what changed
Revision 1 to 2. Removed lines have a minus sign; added lines have a plus sign.
| Old | New | Line | |
|---|---|---|---|
| 1 | 1 | **DIESE SEITE IST VERALTET. BITTE VERWENDEN SIE DIE ENGLISCHE SEITE.** | |
| 2 | 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 | - | ||
| 3 | + | 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. | |
| 41 | 4 | ||
| 42 | 5 | ## API Dokumentation | |
| 43 | 6 | ||
| 44 | 7 | ### API Referenz | |
| 45 | 8 | ||
| 46 | - | ||
| 9 | + | Eine Referenz im CHM-Format befindet sich hier: | |
| 47 | 10 | ||
| 48 | 11 | <http://lazarus-ccr.svn.sourceforge.net/viewvc/lazarus-ccr/components/fpspreadsheet/fpspreadsheet.chm> | |
| 49 | 12 | ||
| 50 | 13 | ### Formeln | |
| 51 | 14 | ||
| 52 | - | ||
| 15 | + | 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](http://de.wikipedia.org/wiki/Umgekehrte_Polnische_Notation) (Reverse Polish Notation) geschrieben werden, zum Beispiel: A1, B1, Add, 0, ROUND | |
| 53 | 16 | ||
| 54 | 17 | ### RPN-Formeln | |
| 55 | 18 | ||
| 56 | 19 | #### Verwendung einfacher konstanter Zahlen | |
| 57 | - | ||
| 20 | + | ||
| 21 | + | ``` pascal | |
| 58 | 22 | var | |
| 59 | - | ||
| 60 | - | ||
| 61 | - | ||
| 62 | - | ||
| 63 | - | ||
| 64 | - | ||
| 65 | - | ||
| 66 | - | ||
| 67 | - | ||
| 68 | - | ||
| 69 | - | ||
| 70 | - | ||
| 71 | - | ||
| 23 | + | MyRPNFormula: TsRPNFormula; | |
| 24 | + | begin | |
| 25 | + | // Schreibt die Formel =4+5 | |
| 26 | + | MyWorksheet.WriteUTF8Text(3, 0, '=4+5'); // A4 | |
| 27 | + | // | |
| 28 | + | SetLength(MyRPNFormula, 3); | |
| 29 | + | MyRPNFormula[0].ElementKind := fekNum; | |
| 30 | + | MyRPNFormula[0].DoubleValue := 4.0; | |
| 31 | + | MyRPNFormula[1].ElementKind := fekNum; | |
| 32 | + | MyRPNFormula[1].DoubleValue := 5.0; | |
| 33 | + | MyRPNFormula[2].ElementKind := fekAdd; | |
| 34 | + | MyWorksheet.WriteRPNFormula(3, 2, MyRPNFormula); | |
| 35 | + | end; | |
| 72 | 36 | ``` | |
| 73 | 37 | ||
| 74 | 38 | #### Verwendung von Zellbereichen und des unären Operators SUM | |
| 75 | - | ||
| 76 | - | ||
| 77 | - | ||
| 78 | - | ||
| 79 | - | ||
| 80 | - | ||
| 81 | - | ||
| 82 | - | ||
| 83 | - | ||
| 84 | - | ||
| 85 | - | ||
| 86 | - | ||
| 39 | + | ||
| 40 | + | ``` pascal | |
| 41 | + | // =Sum(E2:e5) | |
| 42 | + | MyWorksheet.WriteUTF8Text(1, 0, '=Sum(E2:e5)'); // A2 | |
| 43 | + | // | |
| 44 | + | SetLength(MyRPNFormula, 2); | |
| 45 | + | MyRPNFormula[0].ElementKind := fekCellRange; | |
| 46 | + | MyRPNFormula[0].Row := 1; | |
| 47 | + | MyRPNFormula[0].Row2 := 4; | |
| 48 | + | MyRPNFormula[0].Col := 4; | |
| 49 | + | MyRPNFormula[0].Col2 := 4; | |
| 50 | + | MyRPNFormula[1].ElementKind := fekOpSUM; | |
| 51 | + | MyWorksheet.WriteRPNFormula(1, 2, MyRPNFormula); // C2 | |
| 87 | 52 | ``` | |
| 88 | 53 | ||
| 89 | 54 | #### Verwendung eingebauter Routinen | |
| 90 | - | ||
| 91 | - | ||
| 92 | - | ||
| 93 | - | ||
| 94 | - | ||
| 95 | - | ||
| 96 | - | ||
| 97 | - | ||
| 98 | - | ||
| 99 | - | ||
| 100 | - | ||
| 101 | - | ||
| 102 | - | ||
| 103 | - | ||
| 104 | - | ||
| 105 | - | ||
| 106 | - | ||
| 107 | - | ||
| 55 | + | ||
| 56 | + | ``` pascal | |
| 57 | + | // Schreibt die Formel E1 = ABS(A1) | |
| 58 | + | SetLength(MyRPNFormula, 2); | |
| 59 | + | MyRPNFormula[0].ElementKind := fekCell; | |
| 60 | + | MyRPNFormula[0].Col := 0; | |
| 61 | + | MyRPNFormula[0].Row := 0; | |
| 62 | + | MyRPNFormula[1].ElementKind := fekABS; | |
| 63 | + | MyWorksheet.WriteRPNFormula(0, 4, MyRPNFormula); | |
| 64 | + | ||
| 65 | + | // Schreibt die Formel F1 = ROUND(A1, 0) | |
| 66 | + | SetLength(MyRPNFormula, 3); | |
| 67 | + | MyRPNFormula[0].ElementKind := fekCell; | |
| 68 | + | MyRPNFormula[0].Col := 0; | |
| 69 | + | MyRPNFormula[0].Row := 0; | |
| 70 | + | MyRPNFormula[1].ElementKind := fekNum; | |
| 71 | + | MyRPNFormula[1].DoubleValue := 0.0; | |
| 72 | + | MyRPNFormula[2].ElementKind := fekROUND; | |
| 73 | + | MyWorksheet.WriteRPNFormula(0, 5, MyRPNFormula); | |
| 108 | 74 | ``` | |
| 109 | 75 | ||
| 110 | 76 | ### Eingebaute Routinen | |
| 111 | 77 | ||
| 112 | - | ||
| 78 | + | **ABS** - Gibt den absoluten Wert einer Zahl zurück. Benötigt wird 1 Argument. Beispiel: ABS(-1) = 1 | |
| 113 | 79 | ||
| 114 | - | ||
| 80 | + | **ROUND** - Rundet eine Zahl auf eine bestimmte Anzahl von Dezimalstellen. Benötigt 2 Argumente, erstens die zu rundende Zahl und zweitens die Anzahl der Nachkommastellen. Dieses zweite Argument ist standardmäßig auf 0 gesetzt und kann auch negativ werden. | |
| 115 | 81 | ||
| 116 | 82 | ### Packages | |
| 117 | 83 | ||
| 118 | - | ||
| 84 | + | FPSpreadsheet ist zum vereinfachten Gebrauch in folgende zwei Packages aufgeteilt: | |
| 119 | 85 | ||
| 120 | 86 | #### laz_fpspreadsheet.lpk | |
| 121 | 87 | ||
| 122 | - | ||
| 88 | + | 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". | |
| 123 | 89 | ||
| 124 | 90 | #### laz_fpspreadsheet_visual.lpk | |
| 125 | 91 | ||
| 126 | - | ||
| 92 | + | 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. | |
| 127 | 93 | ||
| 128 | - | ||
| 94 | + | Die folgenden LCL Komponenten werden mit diesem Package installiert: | |
| 129 | 95 | ||
| 130 | - | ||
| 131 | - | ||
| 96 | + | - [[TsWorksheetGrid]] | |
| 97 | + | - [[TsWorksheetChartSource]] | |
| 132 | 98 | ||
| 133 | 99 | ## Beispiele | |
| 134 | 100 | ||
| 135 | - | ||
| 101 | + | 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. | |
| 136 | 102 | ||
| 137 | 103 | ### Excel 5 Beispiel | |
| 138 | - | ||
| 104 | + | ||
| 105 | + | ``` pascal | |
| 139 | 106 | { | |
| 140 | - | ||
| 141 | - | ||
| 142 | - | ||
| 143 | - | ||
| 144 | - | ||
| 145 | - | ||
| 146 | - | ||
| 147 | - | ||
| 148 | - | ||
| 149 | - | ||
| 150 | - | ||
| 151 | - | ||
| 152 | - | ||
| 153 | - | ||
| 154 | - | ||
| 155 | - | ||
| 156 | - | ||
| 157 | - | ||
| 158 | - | ||
| 159 | - | ||
| 160 | - | ||
| 161 | - | ||
| 162 | - | ||
| 163 | - | ||
| 164 | - | ||
| 165 | - | ||
| 166 | - | ||
| 167 | - | ||
| 168 | - | ||
| 169 | - | ||
| 170 | - | ||
| 171 | - | ||
| 172 | - | ||
| 173 | - | ||
| 174 | - | ||
| 175 | - | ||
| 176 | - | ||
| 177 | - | ||
| 178 | - | ||
| 179 | - | ||
| 180 | - | ||
| 181 | - | ||
| 182 | - | ||
| 183 | - | ||
| 184 | - | ||
| 185 | - | ||
| 186 | - | ||
| 187 | - | ||
| 188 | - | ||
| 189 | - | ||
| 190 | - | ||
| 191 | - | ||
| 192 | - | ||
| 193 | - | ||
| 194 | - | ||
| 195 | - | ||
| 196 | - | ||
| 197 | - | ||
| 198 | - | ||
| 199 | - | ||
| 200 | - | ||
| 107 | + | excel5demo.dpr | |
| 108 | + | ||
| 109 | + | Demonstriert, wie man eine Excel 5.x Datei schreibt unter Verwendung der fpspreadsheet-Bibliothek. | |
| 110 | + | ||
| 111 | + | Sie können das Ausgabe-Format festlegen indem Sie die Konstante OUTPUT_FORMAT ändern. | |
| 112 | + | ||
| 113 | + | AUTOR: Felipe Monteiro de Carvalho | |
| 114 | + | } | |
| 115 | + | program excel5demo; | |
| 116 | + | ||
| 117 | + | {$mode delphi}{$H+} | |
| 118 | + | ||
| 119 | + | uses | |
| 120 | + | Classes, SysUtils, fpspreadsheet, fpsallformats, fpspreadsheet_pkg; | |
| 121 | + | ||
| 122 | + | const OUTPUT_FORMAT = sfExcel5; | |
| 123 | + | ||
| 124 | + | var | |
| 125 | + | MyWorkbook: TsWorkbook; | |
| 126 | + | MyWorksheet: TsWorksheet; | |
| 127 | + | MyFormula: TsRPNFormula; | |
| 128 | + | MyDir: string; | |
| 129 | + | begin | |
| 130 | + | // Initialisierung | |
| 131 | + | MyDir := ExtractFilePath(ParamStr(0)); | |
| 132 | + | ||
| 133 | + | // Create the spreadsheet | |
| 134 | + | MyWorkbook := TsWorkbook.Create; | |
| 135 | + | MyWorksheet := MyWorkbook.AddWorksheet('My Worksheet'); | |
| 136 | + | ||
| 137 | + | // Write some number cells | |
| 138 | + | MyWorksheet.WriteNumber(0, 0, 1.0); | |
| 139 | + | MyWorksheet.WriteNumber(0, 1, 2.0); | |
| 140 | + | MyWorksheet.WriteNumber(0, 2, 3.0); | |
| 141 | + | MyWorksheet.WriteNumber(0, 3, 4.0); | |
| 142 | + | ||
| 143 | + | // Schreibt die Formel E1 = A1 + B1 | |
| 144 | + | // oder, in RPN: A1, B1, + | |
| 145 | + | SetLength(MyFormula, 3); | |
| 146 | + | MyFormula[0].ElementKind:=fekCell; {A1} | |
| 147 | + | MyFormula[0].Col := 0; | |
| 148 | + | MyFormula[0].Row := 0; | |
| 149 | + | MyFormula[1].ElementKind:=fekCell; {B1} | |
| 150 | + | MyFormula[1].Col := 1; | |
| 151 | + | MyFormula[1].Row := 0; | |
| 152 | + | MyFormula[2].ElementKind:=fekAdd;; {+} | |
| 153 | + | MyWorksheet.WriteRPNFormula(0, 4, MyFormula); | |
| 154 | + | ||
| 155 | + | // Erzeugt ein neues Arbeitsblatt | |
| 156 | + | MyWorksheet := MyWorkbook.AddWorksheet('My Worksheet 2'); | |
| 157 | + | ||
| 158 | + | // Schreibt einige Zeichen in Zellen | |
| 159 | + | MyWorksheet.WriteUTF8Text(0, 0, 'Erster'); | |
| 160 | + | MyWorksheet.WriteUTF8Text(0, 1, 'Zweiter'); | |
| 161 | + | MyWorksheet.WriteUTF8Text(0, 2, 'Dritter'); | |
| 162 | + | MyWorksheet.WriteUTF8Text(0, 3, 'Vierter'); | |
| 163 | + | ||
| 164 | + | // Speichert das Kalkulationsblatt in eine Datei | |
| 165 | + | MyWorkbook.WriteToFile(MyDir + 'test' + STR_EXCEL_EXTENSION, OUTPUT_FORMAT); | |
| 166 | + | MyWorkbook.Free; | |
| 167 | + | end. | |
| 201 | 168 | ``` | |
| 202 | 169 | ||
| 203 | 170 | ### Öffnen eines bestehenden Kalkulationsblattes | |
| 204 | 171 | ||
| 205 | - | ||
| 206 | - | ||
| 172 | + | Um ein Kalkulationsblatt unter Angabe eines besonderen Formats zu öffnen, verwenden Sie ReadFromFile mit zwei Parametern: | |
| 173 | + | ||
| 174 | + | ``` pascal | |
| 207 | 175 | MyWorkbook.ReadFromFile(AFileName, sfExcel5); | |
| 208 | 176 | ``` | |
| 209 | 177 | ||
| 210 | - | ||
| 211 | - | ||
| 178 | + | Wird ReadFromFile mit nur einem Parameter aufgerufen, dann wird versucht, das Dateiformat anhand der Erweiterung zu erkennen. Im Falle mehrdeutiger Formate (wie bei Excel 2-8) werden einfach verschiedene Möglichkeiten probiert, bis eine funktioniert. In Zukunft könnte hier eine effizientere Überprüfung des Excel-Formats erfolgen. | |
| 179 | + | ||
| 180 | + | ``` pascal | |
| 212 | 181 | MyWorkbook.ReadFromFile(AFileName); | |
| 213 | 182 | ``` | |
| 214 | 183 | ||
| 215 | 184 | ### Schreiben eines Kalkulationsblattes in eine Datei abhängig von der Erweiterung | |
| 216 | 185 | ||
| 217 | - | ||
| 186 | + | Ähnlich der ReadFromFile-Routine, habe ich eine Prozedur WriteToFile implementiert (auch mit Vorschlägen und Verbesserungen von Felipe Monteiro de Carvalho), um den Typ eines Kalkulationsblattes anhand der Dateinamen-Erweiterung zu bestimmen. Sie nimmt die Routine getFormatFromFileName aus dem Code des vorigen Abschnitts, der Code ist also einfach. Trotzdem, beim Schreiben einer Datei mit vorgegebener Erweiterung, wird das jeweils neueste Format, das dieser Erweiterung zugeordnet ist, genommen (z.B. werden Excel .xls Dateien als sfExcel8 geschrieben). Falls Sie also ein früheres Format schreiben wollen, dann verwenden Sie bitte die Basisroutine. | |
| 218 | 187 | ||
| 219 | - | ||
| 220 | - | ||
| 188 | + | Wie oben, modifiziert dieser Code die Unit fpspreadsheet.pas. | |
| 189 | + | ||
| 190 | + | ``` pascal | |
| 221 | 191 | procedure TsWorkbook.WriteToFile(const AFileName: string; const AOverwriteExisting: Boolean = False); overload; | |
| 222 | - | ||
| 223 | - | ||
| 224 | - | ||
| 225 | - | ||
| 226 | - | ||
| 227 | - | ||
| 228 | - | ||
| 192 | + | var SheetType: TsSpreadsheetFormat; | |
| 193 | + | begin | |
| 194 | + | if getFormatFromFileName(AFileName, SheetType) then | |
| 195 | + | WriteToFile(AFileName, SheetType, AOverwriteExisting) | |
| 196 | + | else raise Exception.Create(Format( | |
| 197 | + | '[TsWorkbook.WriteToFile] Attempted to save a spreadsheet by extension, but the extension %s is invalid.', [ExtractFileExt(AFileName)])); | |
| 198 | + | end; | |
| 229 | 199 | ``` | |
| 230 | 200 | ||
| 231 | 201 | ### Iteration durch alle Arbeitsblätter | |
| 232 | - | ||
| 202 | + | ||
| 203 | + | ``` pascal | |
| 233 | 204 | var | |
| 234 | - | ||
| 235 | - | ||
| 236 | - | ||
| 237 | - | ||
| 238 | - | ||
| 239 | - | ||
| 240 | - | ||
| 241 | - | ||
| 242 | - | ||
| 243 | - | ||
| 244 | - | ||
| 205 | + | MyWorkbook: TsWorkbook; | |
| 206 | + | MyWorksheet: TsWorksheet; | |
| 207 | + | i: Integer; | |
| 208 | + | begin | |
| 209 | + | // Hier wird MyWorkbook aus einer Datei geladen oder neu erzeugt | |
| 210 | + | ||
| 211 | + | for i := 0 to MyWorkbook.GetWorksheetCount() - 1 do | |
| 212 | + | begin | |
| 213 | + | MyWorksheet := MyWorkbook.GetWorksheetByIndex(i); | |
| 214 | + | // Mach etwas mit MyWorksheet | |
| 215 | + | end; | |
| 245 | 216 | ``` | |
| 246 | 217 | ||
| 247 | 218 | ### Daten aus einer Datenbank in eine Kalkulationstabelle konvertieren | |
| 248 | 219 | ||
| 249 | - | ||
| 250 | - | ||
| 220 | + | Beachten Sie, dass es sich hier um nicht getesteten Meta-Code handelt. | |
| 221 | + | ||
| 222 | + | ``` pascal | |
| 251 | 223 | program db5xls; | |
| 252 | - | ||
| 253 | - | ||
| 254 | - | ||
| 255 | - | ||
| 256 | - | ||
| 257 | - | ||
| 258 | - | ||
| 259 | - | ||
| 260 | - | ||
| 261 | - | ||
| 262 | - | ||
| 263 | - | ||
| 264 | - | ||
| 265 | - | ||
| 266 | - | ||
| 267 | - | ||
| 268 | - | ||
| 269 | - | ||
| 270 | - | ||
| 271 | - | ||
| 272 | - | ||
| 273 | - | ||
| 274 | - | ||
| 275 | - | ||
| 276 | - | ||
| 277 | - | ||
| 278 | - | ||
| 279 | - | ||
| 280 | - | ||
| 281 | - | ||
| 282 | - | ||
| 283 | - | ||
| 284 | - | ||
| 285 | - | ||
| 286 | - | ||
| 287 | - | ||
| 288 | - | ||
| 289 | - | ||
| 290 | - | ||
| 291 | - | ||
| 292 | - | ||
| 293 | - | ||
| 294 | - | ||
| 295 | - | ||
| 296 | - | ||
| 297 | - | ||
| 298 | - | ||
| 299 | - | ||
| 300 | - | ||
| 301 | - | ||
| 302 | - | ||
| 303 | - | ||
| 304 | - | ||
| 305 | - | ||
| 224 | + | ||
| 225 | + | {$mode delphi}{$H+} | |
| 226 | + | ||
| 227 | + | uses | |
| 228 | + | Classes, SysUtils, | |
| 229 | + | // alle notwendigen Datenbank-Units hinzufügen | |
| 230 | + | fpspreadsheet, fpsallformats, fpspreadsheet_pkg; | |
| 231 | + | ||
| 232 | + | const OUTPUT_FORMAT = sfExcel5; | |
| 233 | + | ||
| 234 | + | var | |
| 235 | + | MyWorkbook: TsWorkbook; | |
| 236 | + | MyWorksheet: TsWorksheet; | |
| 237 | + | MyDatabase: TSdfDataset; | |
| 238 | + | MyDir: string; | |
| 239 | + | i, j: Integer; | |
| 240 | + | begin | |
| 241 | + | // Initialisierung | |
| 242 | + | MyDir := ExtractFilePath(ParamStr(0)); | |
| 243 | + | ||
| 244 | + | // die Datenbank öffnen | |
| 245 | + | MyDatabase := TSdfDataset.Create; | |
| 246 | + | MyDatabase.Filename := 'test.dat'; | |
| 247 | + | // hier die Tabellenbeschreibung hinzufügen | |
| 248 | + | MyDatabase.Active := True; | |
| 249 | + | ||
| 250 | + | // Erzeugt die Kalkulationstabelle | |
| 251 | + | MyWorkbook := TsWorkbook.Create; | |
| 252 | + | MyWorksheet := MyWorkbook.AddWorksheet('My Worksheet'); | |
| 253 | + | ||
| 254 | + | // die Feldnamen schreiben | |
| 255 | + | for i := 0 to MyDatabase.Fields.Count - 1 do | |
| 256 | + | MyWorksheet.WriteUTF8Text(0, i, MyDatabase.Field[i].FieldName); | |
| 257 | + | ||
| 258 | + | // alle Felder in das Arbeitsblatt schreiben | |
| 259 | + | MyDatabase.First; | |
| 260 | + | j := 0; | |
| 261 | + | while not MyDatabase.EOF do | |
| 262 | + | begin | |
| 263 | + | for i := 0 to MyDatabase.Fields.Count - 1 do | |
| 264 | + | MyWorksheet.WriteUTF8Text(j + 1, i, MyDatabase.Field[i].AsString); | |
| 265 | + | ||
| 266 | + | MyDatabase.Next; | |
| 267 | + | Inc(j); | |
| 268 | + | end; | |
| 269 | + | ||
| 270 | + | // die Datenbank schließen | |
| 271 | + | MyDatabase.Active := False; | |
| 272 | + | MyDatabase.Free; | |
| 273 | + | ||
| 274 | + | // Save the spreadsheet to a file | |
| 275 | + | MyWorkbook.WriteToFile(MyDir + 'test' + STR_EXCEL_EXTENSION, OUTPUT_FORMAT); | |
| 276 | + | MyWorkbook.Free; | |
| 277 | + | end. | |
| 306 | 278 | ``` | |
| 307 | 279 | ||
| 308 | 280 | ### Konvertierung zwischen zwei Tabellenkalkulationsformaten | |
| 309 | 281 | ||
| 310 | - | ||
| 311 | - | ||
| 282 | + | Beachten Sie, dass es sich hier um nicht getesteten Meta-Code handelt. | |
| 283 | + | ||
| 284 | + | ``` pascal | |
| 312 | 285 | program ods2xls; | |
| 313 | - | ||
| 314 | - | ||
| 315 | - | ||
| 316 | - | ||
| 317 | - | ||
| 318 | - | ||
| 319 | - | ||
| 320 | - | ||
| 321 | - | ||
| 322 | - | ||
| 323 | - | ||
| 324 | - | ||
| 325 | - | ||
| 326 | - | ||
| 327 | - | ||
| 328 | - | ||
| 329 | - | ||
| 330 | - | ||
| 331 | - | ||
| 332 | - | ||
| 333 | - | ||
| 334 | - | ||
| 335 | - | ||
| 336 | - | ||
| 337 | - | ||
| 338 | - | ||
| 339 | - | ||
| 286 | + | ||
| 287 | + | {$mode delphi}{$H+} | |
| 288 | + | ||
| 289 | + | uses | |
| 290 | + | Classes, SysUtils, | |
| 291 | + | fpspreadsheet, fpsallformats, fpspreadsheet_pkg; | |
| 292 | + | ||
| 293 | + | const | |
| 294 | + | INPUT_FORMAT = sfOpenDocument; | |
| 295 | + | OUTPUT_FORMAT = sfExcel8; | |
| 296 | + | ||
| 297 | + | var | |
| 298 | + | MyWorkbook: TsWorkbook; | |
| 299 | + | MyDir: string; | |
| 300 | + | begin | |
| 301 | + | // Initialisierung | |
| 302 | + | MyDir := ExtractFilePath(ParamStr(0)); | |
| 303 | + | ||
| 304 | + | // Konvertiert die Kalkulationstabelle | |
| 305 | + | MyWorkbook := TsWorkbook.Create; | |
| 306 | + | try | |
| 307 | + | MyWorkbook.ReadFromFile(MyDir + 'test.ods', INPUT_FORMAT); | |
| 308 | + | MyWorkbook.WriteToFile(MyDir + 'test.xls', OUTPUT_FORMAT); | |
| 309 | + | finally | |
| 310 | + | MyWorkbook.Free; | |
| 311 | + | end; | |
| 312 | + | end. | |
| 340 | 313 | ``` | |
| 341 | 314 | ||
| 342 | 315 | ### Verwendung von Formatierungsoptionen | |
| 343 | 316 | ||
| 344 | - | ||
| 345 | - | ||
| 346 | - | ||
| 347 | - | ||
| 348 | - | ||
| 317 | + | Die Formatierung wird unabhängig vom Text gesetzt wie im folgenden Beispiel: | |
| 318 | + | ||
| 319 | + | ``` pascal | |
| 320 | + | // Erzeugt einen fett geschriebenen Text | |
| 321 | + | MyWorksheet.WriteUTF8Text(0, 0, 'First'); | |
| 322 | + | MyWorksheet.WriteUsedFormatting(0, 0, [uffBold]); | |
| 349 | 323 | ``` | |
| 350 | 324 | ||
| 351 | 325 | #### Einstellen der Textorientierung | |
| 352 | 326 | ||
| 353 | - | ||
| 327 | + | Es gibt drei mögliche Textrichtungen: trHorizontal, rt90DegreeClockwiseRotation and rt90DegreeCounterClockwiseRotation | |
| 354 | 328 | ||
| 355 | - | ||
| 356 | - | ||
| 357 | - | ||
| 358 | - | ||
| 359 | - | ||
| 360 | - | ||
| 361 | - | ||
| 329 | + | Sie sind relativ zur Standardausrichtung des Textes. | |
| 330 | + | ||
| 331 | + | ``` pascal | |
| 332 | + | // Schreibt in Fettschrift | |
| 333 | + | MyWorksheet.WriteUTF8Text(0, 0, 'First'); | |
| 334 | + | MyCell := MyWorksheet.GetCell(0, 0); | |
| 335 | + | MyCell^.TextRotation := rt90DegreeClockwiseRotation; | |
| 336 | + | MyCell^.UsedFormattingFields := [uffTextRotation]; | |
| 362 | 337 | ``` | |
| 363 | 338 | ||
| 364 | 339 | #### Einstellen eines Randes | |
| 365 | - | ||
| 366 | - | ||
| 367 | - | ||
| 368 | - | ||
| 369 | - | ||
| 370 | - | ||
| 340 | + | ||
| 341 | + | ``` pascal | |
| 342 | + | // Schreibt einen Text mit Rand und Hintergrundfarbe | |
| 343 | + | MyWorksheet.WriteUTF8Text(5, 9, '[N,W,E,S]');// J6 | |
| 344 | + | MyCell := MyWorksheet.GetCell(5, 9); | |
| 345 | + | MyCell^.Border := [cbNorth, cbWest, cbEast, cbSouth]; | |
| 346 | + | MyCell^.UsedFormattingFields := [uffBorder, uffBold, uffBackgroundColor]; | |
| 371 | 347 | ``` | |
| 372 | 348 | ||
| 373 | 349 | #### Einstellen einer Hintergrundfarbe | |
| 374 | 350 | ||
| 375 | - | ||
| 376 | - | ||
| 377 | - | ||
| 378 | - | ||
| 379 | - | ||
| 380 | - | ||
| 381 | - | ||
| 382 | - | ||
| 383 | - | ||
| 384 | - | ||
| 385 | - | ||
| 386 | - | ||
| 387 | - | ||
| 388 | - | ||
| 389 | - | ||
| 390 | - | ||
| 391 | - | ||
| 392 | - | ||
| 393 | - | ||
| 394 | - | ||
| 395 | - | ||
| 396 | - | ||
| 397 | - | ||
| 398 | - | ||
| 399 | - | ||
| 400 | - | ||
| 351 | + | Sie können eine von 16 Farben aus einer Palette für den Hintergrund auswählen. Die möglichen Werte sind: | |
| 401 | 352 | ||
| 402 | - | ||
| 353 | + | ``` pascal | |
| 354 | + | {@@ Farben in FPSpreadsheet wie festgelegt in einer Excel-kompatiblen Palette } | |
| 355 | + | ||
| 356 | + | TsColor = ( | |
| 357 | + | scBlack, // 000000H | |
| 358 | + | scWhite, // FFFFFFH | |
| 359 | + | scRed, // FF0000H | |
| 360 | + | scGREEN, // 00FF00H | |
| 361 | + | scBLUE, // 0000FFH | |
| 362 | + | scYELLOW, // FFFF00H | |
| 363 | + | scMAGENTA, // FF00FFH | |
| 364 | + | scCYAN, // 00FFFFH | |
| 365 | + | scDarkRed, // 800000H | |
| 366 | + | scDarkGreen,// 008000H | |
| 367 | + | scDarkBlue, // 000080H | |
| 368 | + | scOLIVE, // 808000H | |
| 369 | + | scPURPLE, // 800080H | |
| 370 | + | scTEAL, // 008080H | |
| 371 | + | scSilver, // C0C0C0H | |
| 372 | + | scGrey // 808080H | |
| 373 | + | // | |
| 374 | + | scGrey10pct,// E6E6E6H | |
| 375 | + | scGrey20pct // CCCCCCH | |
| 376 | + | ); | |
| 403 | 377 | ``` | |
| 404 | - | ||
| 405 | - | ||
| 406 | - | ||
| 407 | - | ||
| 408 | - | ||
| 378 | + | ||
| 379 | + | Und ein Beispiel: | |
| 380 | + | ||
| 381 | + | ``` pascal | |
| 382 | + | // Schreibt einen Text mit Hintergrundfarbe | |
| 383 | + | MyWorksheet.WriteUTF8Text(0, 0, 'Test'); | |
| 384 | + | MyCell := MyWorksheet.GetCell(0, 0); | |
| 385 | + | MyCell^.BackgroundColor := scSilver; | |
| 386 | + | MyCell^.UsedFormattingFields := [uffBackgroundColor]; | |
| 409 | 387 | ``` | |
| 410 | 388 | ||
| 411 | 389 | #### Kombination mehrerer Formatierungen | |
| 412 | - | ||
| 413 | - | ||
| 414 | - | ||
| 415 | - | ||
| 416 | - | ||
| 417 | - | ||
| 390 | + | ||
| 391 | + | ``` pascal | |
| 392 | + | // Schreibt einen Text mit Rand und mit Hintergrundfarbe | |
| 393 | + | MyWorksheet.WriteUTF8Text(5, 9, '[N,W,E,S]'); | |
| 394 | + | MyCell := MyWorksheet.GetCell(5, 9); | |
| 395 | + | MyCell^.Border := [cbNorth, cbWest, cbEast, cbSouth]; | |
| 396 | + | MyCell^.UsedFormattingFields := [uffBorder, uffBold, uffBackgroundColor]; | |
| 418 | 397 | ``` | |
| 419 | 398 | ||
| 420 | 399 | ### Gitter- und Diagramm-Steuerelemente mit FPSpreadsheet | |
| 421 | 400 | ||
| 422 | 401 | Siehe [[TsWorksheetChartSource]] | |
| 423 | 402 | ||
| 424 | 403 | ## Download | |
| 425 | 404 | ||
| 426 | 405 | ### Subversion | |
| 427 | 406 | ||
| 428 | - | ||
| 429 | - | ||
| 430 | - | ||
| 431 | - | ||
| 407 | + | Sie können FPSpreadsheet mit dem folgenden Befehl herunterladen unter Verwendung von Subversion: | |
| 432 | 408 | ||
| 409 | + | svn checkout svn://svn.code.sf.net/p/lazarus-ccr/svn/components/fpspreadsheet fpspreadsheet | |
| 410 | + | ||
| 433 | 411 | ### Neueste Version | |
| 434 | 412 | ||
| 435 | - | ||
| 413 | + | Die neueste Version finden Sie hier auf SourceForge: | |
| 436 | 414 | ||
| 437 | 415 | <https://sourceforge.net/projects/lazarus-ccr/files/FPSpreadsheet/> | |
| 438 | 416 | ||
| 439 | 417 | ## Unterstützung und Fehlerberichte | |
| 440 | 418 | ||
| 441 | - | ||
| 419 | + | Diskussionen zum Thema FPSpreadsheet sollten im Lazarus Forum: <http://www.lazarus.freepascal.org/index.php/board,42.0.html> geführt werden. Dort wird man auch am ehesten Unterstützung erhalten. | |
| 442 | 420 | ||
| 443 | 421 | Fehlerberichte sollten an den Pascal Bug Tracker im Abschnitt "Lazarus-CCR" gesendet werden: <http://bugs.freepascal.org/> | |
| 444 | 422 | ||
| 445 | 423 | ## Aktueller Fortschritt | |
| 446 | 424 | ||
| 447 | - | ||
| 425 | + | Fortschritte nach unterstützten Formaten: | |
| 448 | 426 | ||
| 449 | - | ||
| 450 | - | ||
| 451 | - | ||
| 452 | - | ||
| 453 | - | ||
| 454 | - | ||
| 455 | - | ||
| 456 | - | ||
| 457 | - | ||
| 458 | - | ||
| 459 | - | ||
| 460 | - | ||
| 461 | - | ||
| 427 | + | | **Format** | **Unterstützt mehrere Blätter?** | **Unterstützt Unicode?** | **Reader Fortschritt** | **Writer Fortschritt** | **Text** | **Zahl** | **String Formel** | **RPN Formel** | **Datum/Zeit** | | |
| 428 | + | |----|----|----|----|----|----|----|----|----|----| | |
| 429 | + | | CSV | Nein | Ja | nicht implementiert | nicht implementiert | nicht implementiert | nicht implementiert | nicht implementiert | nicht implementiert | nicht implementiert | | |
| 430 | + | | Excel 2.x | Nein | Nein** | Working | Working | Working | Working | nicht implementiert | Working | nicht implementiert | | |
| 431 | + | | Excel 3.0 | Nein | Nein** | nicht implementiert | nicht implementiert | nicht implementiert | nicht implementiert | nicht implementiert | nicht implementiert | nicht implementiert | | |
| 432 | + | | Excel 4.0 | Nein | Nein** | nicht implementiert | nicht implementiert | nicht implementiert | nicht implementiert | nicht implementiert | nicht implementiert | nicht implementiert | | |
| 433 | + | | Excel 5.0 (Excel 5.0 and 95) | Ja | Nein** | Working* | Working | Working | Working | nicht implementiert | Working | nicht implementiert | | |
| 434 | + | | Excel 8.0 (Excel 97, 2000, XP and 2003) | Ja | Ja | Working* | Working | Working | Working | nicht implementiert | Working | Read only and dates only | | |
| 435 | + | | Microsoft OOXML | Ja | Ja | nicht implementiert | Working | nicht implementiert | nicht implementiert | nicht implementiert | nicht implementiert | nicht implementiert | | |
| 436 | + | | OpenDocument | Ja | Ja | Working | Working | Working | Working | nicht implementiert | nicht implementiert | nicht implementiert | | |
| 462 | 437 | ||
| 438 | + | (*) Einige Zellen könnten leer bleiben aufgrund fehlender oder noch nicht implementierter Zahlen- und Textformate.\ | |
| 439 | + | (**) In Formaten, die nicht Unicode unterstützen, werden die Daten als ISO 8859-1 (Latin 1)gespeichert. Sie können die Kodierung in TsWorkbook.Encoding ändern. Beachten Sie: FPSpreadsheet bietet Lese- und Schreibroutinen für UTF-8, aber die Daten könnten beim Lesen oder Schreiben auf Disk zu ISO konvertiert werden. Zeichen, die nicht zur ausgewählten Kodierung passen, gehen bei diesen Operationen verloren. Die Anmerkungen hier sind nur gültig für Formate, die Unicode nicht unterstützen. | |
| 440 | + | ||
| 463 | 441 | ### Fortschritt der Formatierungsoptionen | |
| 464 | 442 | ||
| 465 | - | ||
| 443 | + | Einige Formatierungsoptionen wurden hinzugefügt, aber sie sind noch nicht für alle Formate implementiert: | |
| 466 | 444 | ||
| 467 | - | ||
| 468 | - | ||
| 469 | - | ||
| 470 | - | ||
| 471 | - | ||
| 472 | - | ||
| 473 | - | ||
| 474 | - | ||
| 475 | - | ||
| 476 | - | ||
| 477 | - | ||
| 445 | + | | **Format** | **Textrotation** | **Fett** | **Rahmen** | **Hintergrundfarbe** | | |
| 446 | + | |----|----|----|----|----| | |
| 447 | + | | CSV | nicht verfügbar | nicht verfügbar | nicht verfügbar | nicht verfügbar | | |
| 448 | + | | Excel 2.x | nicht implementiert | nicht implementiert | nicht implementiert | nicht implementiert | | |
| 449 | + | | Excel 3.0 | nicht implementiert | nicht implementiert | nicht implementiert | nicht implementiert | | |
| 450 | + | | Excel 4.0 | nicht implementiert | nicht implementiert | nicht implementiert | nicht implementiert | | |
| 451 | + | | Excel 5.0 (Excel 5.0 and 95)\|\|-\|\|- | nicht implementiert | nicht implementiert | | | | |
| 452 | + | | Excel 8.0 (Excel 97, 2000, XP and 2003) | Working | Working | Working | Working | | |
| 453 | + | | Microsoft OOXML | nicht implementiert | Working | nicht implementiert | nicht implementiert | | |
| 454 | + | | OpenDocument | Working | Working | Working | Working | | |
| 455 | + | ||
| 478 | 456 | ## Änderungen | |
| 479 | 457 | ||
| 480 | - | ||
| 458 | + | November 2011 | |
| 481 | 459 | ||
| 482 | - | ||
| 460 | + | - Released version 1.0, which includes OO XML generation support with bold formating supported and also a lot of improvements from the last years | |
| 483 | 461 | ||
| 484 | - | ||
| 462 | + | Januar 2009 | |
| 485 | 463 | ||
| 486 | - | ||
| 487 | - | ||
| 464 | + | - Implemented a cross-platform support for OLE file. Now Excel 5.0 files can be created in any operating system. | |
| 465 | + | - Adds read support for Excel 2.1 | |
| 488 | 466 | ||
| 489 | - | ||
| 467 | + | Februar 2008 | |
| 490 | 468 | ||
| 491 | - | ||
| 469 | + | - Initial commit to lazarus-ccr with write support for Excel 2.1, Excel 5.0 (Windows only) and experimental OOXML and OpenDocument | |
| 492 | 470 | ||
| 493 | 471 | ## Lizenz | |
| 494 | 472 | ||
| 495 | - | ||
| 473 | + | LGPL with static linking exception. Dies ist die selbe Lizenz wie sie von der Lazarus Component Library verwendet wird. | |
| 496 | 474 | ||
| 497 | 475 | ## Siehe auch | |
| 498 | 476 | ||
| 499 | - | ||
| 500 | - | ||
| 477 | + | - [[Office Automation]] | |
| 478 | + | - [[CsvDocument]] | |
| 501 | 479 | ||
| 502 | 480 | ## Externe Links | |
| 503 | 481 | ||
| 504 | - | ||
| 505 | - | ||
| 482 | + | - Microsoft OLE Document Format - <http://sc.openoffice.org/compdocfileformat.pdf> | |
| 483 | + | - Excel-Dateiformat-Beschreibung - <http://sc.openoffice.org/excelfileformat.pdf> | |
| 506 | 484 | ||
| 507 | 485 | --- | |
| 508 | - | ||
| 486 | + | *From the Free Pascal wiki, page "FPSpreadsheet/de", as it stood on 2020-02-16 after a change by Trev, out of the wiki's dump of 2024-05-26. Copyright stays with the author who wrote it, according to the old wiki's [[Licensing]] page. If you have concerns about this material, [message the admin](/wiki-contact).* |
