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.
→ Units-Übersicht · 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
