Skip to content

Office-Dokumente bearbeiten

EditableDocument ist das Read-modify-write-Pendant zu Document. Es bewahrt jeden unveränderten OPC-Teil — Bilder, Diagramme, Stile, Themes, Beziehungen — wortwörtlich, sodass deine Änderungen nicht den umgebenden Inhalt umbrechen oder Downstream-Konsumenten ungültig machen.

Bearbeiten wird unterstützt für DOCX, XLSX und PPTX. Legacy-DOC, -XLS und -PPT sind nur lesbar — wenn du sie bearbeiten willst, konvertiere zuerst mit save_as.

Was du machen kannst

Operation DOCX XLSX PPTX Methode
Text in Body / Placeholdern ersetzen replace_text
Zellwert setzen (string / number / bool / leer) set_cell
Auf Disk speichern save
In Bytes speichern save_to_bytes

replace_text liefert auf XLSX 0 zurück (dort gibt es keine <w:t>- oder <a:t>-Elemente); für Spreadsheets set_cell benutzen.

Öffnen, bearbeiten, speichern

Python

from office_oxide import EditableDocument

with EditableDocument.open("template.docx") as ed:
    ed.replace_text("{{name}}", "Alice")
    ed.replace_text("{{date}}", "2026-04-19")
    ed.save("filled.docx")

Rust

use office_oxide::edit::EditableDocument;

let mut ed = EditableDocument::open("template.docx")?;
ed.replace_text("{{name}}", "Alice");
ed.replace_text("{{date}}", "2026-04-19");
ed.save("filled.docx")?;

JavaScript

import { EditableDocument } from 'office-oxide';

using ed = EditableDocument.open('template.docx');
ed.replaceText('{{name}}', 'Alice');
ed.replaceText('{{date}}', '2026-04-19');
ed.save('filled.docx');

Go

ed, err := officeoxide.OpenEditable("template.docx")
defer ed.Close()
ed.ReplaceText("{{name}}", "Alice")
ed.ReplaceText("{{date}}", "2026-04-19")
ed.Save("filled.docx")

C#

using var ed = EditableDocument.Open("template.docx");
ed.ReplaceText("{{name}}", "Alice");
ed.ReplaceText("{{date}}", "2026-04-19");
ed.Save("filled.docx");

In Bytes speichern (für Upload / Streaming)

Python

with EditableDocument.open("template.docx") as ed:
    ed.replace_text("{{name}}", "Alice")
    bytes_out = ed.save_to_bytes()
    # bytes_out nach S3 hochladen / per HTTP rausschicken / etc.

Rust

let mut ed = EditableDocument::open("template.docx")?;
ed.replace_text("{{name}}", "Alice");

let mut buf = std::io::Cursor::new(Vec::new());
ed.write_to(&mut buf)?;
let bytes: Vec<u8> = buf.into_inner();

JavaScript

using ed = EditableDocument.open('template.docx');
ed.replaceText('{{name}}', 'Alice');
const bytes = ed.saveToBytes();   // Uint8Array

Was „OPC-Teile bewahren" konkret bedeutet

OOXML-Dateien sind ZIP-Archive mit dutzenden XML-Teilen plus binären Teilen (Bilder, Schriftarten, eingebettete Objekte). Naive Editoren reserialisieren beim Speichern jeden Teil, was:

  • Beziehungen umordnet und Links bricht
  • Erweiterungs-Teile, die der Editor nicht versteht, droppt (Custom XML, AlternateContent-Fallbacks)
  • XML so umformatiert, dass Downstream-Diffs und Signaturen brechen

EditableDocument schreibt nur die Teile neu, die du angefasst hast. Alles andere wird Byte für Byte kopiert. Das Ergebnis ist der kleinstmögliche Diff zwischen Input und Output — angenehm für Versionskontrolle, Signaturprüfung und Round-Trip durch andere Tools.

Wann zur formatspezifischen API greifen

EditableDocument deckt 80 % der Fälle ab (Templating, Batch-Fill, Zellschreibzugriffe). Für reichere Edits — Absätze hinzufügen, Tabellen einfügen, Stile anpassen, Folien von Grund auf bauen — ab in die formatspezifischen APIs:

use office_oxide::docx::edit::DocxEditor;

let mut docx = DocxEditor::open("report.docx")?;
docx.append_paragraph("Neuer Abschnitt", Some("Heading2"));
docx.save("report.docx")?;

Die formatspezifischen Editoren sind in der Referenz jeder Bindung dokumentiert (Rust: docx::edit, xlsx::edit, pptx::edit).

Siehe auch