====== std.office — Office-Dokumente ====== Das ''std.office''-Paket ermöglicht das Erstellen von ODF-konformen Dokumenten (OpenDocument Format) direkt aus Lyx. Es unterstützt Textdokumente (ODT) und Tabellenkalkulationen (ODS). Die erzeugten Dateien lassen sich in LibreOffice, OpenOffice und Microsoft Office öffnen. Unter der Haube verwendet ''std.office'' ''std.zip'', um die ODF-Struktur als ZIP-Archiv zu schreiben. → [[lyx_-_programmiersprache:units|Units-Übersicht]] · [[lyx_-_programmiersprache:start|Lyx-Sprache]] ---- ===== Units ===== ^ Unit ^ Code ^ Beschreibung ^ | ''std.office.odf_doc'' | OFF-03 | ''OdfDocument''-Klasse: Kern-Dokument, XML-Aufbau, Style-Verwaltung, ''SaveToFile'' | | ''std.office.odt'' | OFF-04 | ODT-Text-Writer: Absätze, Überschriften, formatierter Text | | ''std.office.ods'' | OFF-05 | ODS-Tabellen-Writer: Sheets, Zellen (String, Int, Float) | | ''std.office.odf_xml'' | intern | XML-Templates und Escape-Hilfsfunktionen (kein direkter Import nötig) | ---- ===== OdfDocument — Kern-Objekt ===== Alle Dokument-Typen bauen auf ''OdfDocument'' auf. Das Objekt verwaltet zwei interne Wachstums-Puffer: einen für den Dokumentinhalt, einen für automatische Stile (Fett, Kursiv). ==== Initialisierung und Speichern ==== import std.office.odf_doc; import std.office.odt; fn main(): int64 { var doc: OdfDocument; doc.Init(ODF_TYPE_TEXT); // Textdokument OdtAddHeading(doc, "Bericht 2026", 1); OdtAddParagraph(doc, "Erstes Kapitel."); var rc: int64 := doc.SaveToFile("bericht.odt"c); doc.Close(); return rc; } ^ Konstante ^ Wert ^ Bedeutung ^ | ''ODF_TYPE_TEXT'' | 1 | Textdokument (.odt) | | ''ODF_TYPE_SPREADSHEET'' | 2 | Tabellenkalkulation (.ods) | | ''ODF_OK'' | 0 | Speichern erfolgreich | | ''ODF_ERR'' | -1 | Fehler beim Speichern | ''SaveToFile'' schließt offene ODS-Zeilen und -Sheets automatisch bevor es das ZIP schreibt. ---- ===== ODT — Textdokumente ===== import std.office.odf_doc; import std.office.odt; fn CreateReport(path: pchar): void { var doc: OdfDocument; doc.Init(ODF_TYPE_TEXT); OdtAddHeading(doc, "Zusammenfassung", 1); OdtAddParagraph(doc, "Dieses Dokument wurde mit Lyx erzeugt."); OdtAddHeading(doc, "Details", 2); OdtAddParagraphStyled(doc, "Wichtiger Hinweis!", 1, 0); // fett OdtAddParagraphStyled(doc, "Hinweis in kursiv.", 0, 1); // kursiv OdtAddParagraphStyled(doc, "Fett und kursiv.", 1, 1); OdtAddHorizontalRule(doc); OdtAddParagraph(doc, "Ende des Berichts."); doc.SaveToFile(path as pchar); doc.Close(); } ==== Funktionen ==== ^ Funktion ^ Beschreibung ^ | ''OdtAddParagraph(doc, text)'' | Standardabsatz mit ''Standard''-Style | | ''OdtAddLineBreak(doc)'' | Leerabsatz (Leerzeile) | | ''OdtAddHorizontalRule(doc)'' | Trennlinie (em-Dash-Zeichen) | | ''OdtAddHeading(doc, text, level)'' | Überschrift Ebene 1–6 | | ''OdtAddParagraphStyled(doc, text, bold, italic)'' | Absatz mit Fett- und/oder Kursiv-Formatierung | Für ''OdtAddParagraphStyled'' gilt: ''bold'' und ''italic'' sind je ''0'' (aus) oder ''1'' (an). Werden beide auf ''0'' gesetzt, wird einfach ''OdtAddParagraph'' aufgerufen. Stile werden lazy angelegt und innerhalb des Dokuments wiederverwendet (Deduplizierung). ---- ===== ODS — Tabellenkalkulationen ===== import std.office.odf_doc; import std.office.ods; fn CreateTable(path: pchar): void { var doc: OdfDocument; doc.Init(ODF_TYPE_SPREADSHEET); OdsAddSheet(doc, "Umsatz"c); // Kopfzeile (Zeile 0) OdsSetCell(doc, 0, 0, "Monat"c); OdsSetCell(doc, 0, 1, "Umsatz"c); OdsSetCell(doc, 0, 2, "Wachstum"c); // Datenzeilen OdsSetCell(doc, 1, 0, "Januar"c); OdsSetCellInt(doc, 1, 1, 12500); OdsSetCellFloat(doc, 1, 2, 523, 1); // 52.3 OdsSetCell(doc, 2, 0, "Februar"c); OdsSetCellInt(doc, 2, 1, 14200); OdsSetCellFloat(doc, 2, 2, 136, 1); // 13.6 // Zweites Sheet OdsAddSheet(doc, "Kosten"c); OdsSetCell(doc, 0, 0, "Posten"c); OdsSetCell(doc, 0, 1, "Betrag"c); doc.SaveToFile(path as pchar); doc.Close(); } ==== Funktionen ==== ^ Funktion ^ Beschreibung ^ | ''OdsAddSheet(doc, name)'' | Neues Sheet öffnen (schließt vorheriges Sheet automatisch) | | ''OdsFlushSheet(doc)'' | Aktuelles Sheet explizit schließen | | ''OdsSetCell(doc, row, col, text)'' | String-Zelle bei (row, col) schreiben | | ''OdsSetCellInt(doc, row, col, val)'' | Ganzzahl-Zelle schreiben | | ''OdsSetCellFloat(doc, row, col, val, decimals)'' | Gleitkomma-Zelle | ==== Koordinaten ==== Zeilen (''row'') und Spalten (''col'') sind **nullbasiert** und müssen **monoton steigend** übergeben werden. Übersprungene Zeilen/Spalten werden automatisch mit leeren Zellen aufgefüllt. ==== Gleitkommazahlen ==== Da Lyx intern nur ''int64'' kennt, werden Dezimalzahlen als ganzzahliger Wert mit einem Dezimalstellen-Faktor übergeben: // 3.14 → val=314, decimals=2 OdsSetCellFloat(doc, 0, 0, 314, 2); // -0.05 → val=-5, decimals=2 OdsSetCellFloat(doc, 0, 1, 0 - 5, 2); // 1000 (keine Nachkommastellen) → decimals=0 OdsSetCellFloat(doc, 0, 2, 1000, 0); ---- ===== Quelldateien ===== ^ Datei ^ Inhalt ^ | ''std/office/odf_doc.lyx'' | OFF-03: OdfDocument-Klasse, Puffer-Verwaltung, Style-Deduplizierung, ZIP-Ausgabe | | ''std/office/odt.lyx'' | OFF-04: ODT-Writer-Funktionen (Absatz, Überschrift, Formatierung) | | ''std/office/ods.lyx'' | OFF-05: ODS-Writer-Funktionen (Sheets, Zeilen, Zellen) | | ''std/office/odf_xml.lyx'' | XML-Templates (Header, Footer, Manifest, Styles) — intern, kein direkter Import | Letzte Aktualisierung: 2026-06-15