Skip to content

Text aus Office-Dokumenten extrahieren

Office Oxide hat einen einzigen Einstiegspunkt — extract_text() (bzw. Document.open(...).plain_text()) — der für DOCX, XLSX, PPTX, DOC, XLS und PPT gleich funktioniert. Keine formatspezifischen Codepfade.

Einzelaufruf-Helfer

Der schnellste Weg: ein einziger Funktionsaufruf öffnet die Datei, ruft den passenden Extraktor auf und liefert einen String zurück.

Rust

use office_oxide::extract_text;

let text = extract_text("report.docx")?;
println!("{text}");

Python

import office_oxide

text = office_oxide.extract_text("report.docx")
print(text)

JavaScript

import { extractText } from 'office-oxide';

console.log(extractText('report.docx'));

Go

import officeoxide "github.com/yfedoseev/office_oxide/go"

text, err := officeoxide.ExtractText("report.docx")

C#

using OfficeOxide;

string text = OfficeOxide.ExtractText("report.docx");

Wiederverwendbares Handle

Wenn du neben Text noch andere Ausgaben (Markdown, HTML, IR) brauchst, öffne das Dokument einmal und nutze das Handle weiter:

Rust

use office_oxide::Document;

let doc = Document::open("report.docx")?;
let text = doc.plain_text();
let md   = doc.to_markdown();

Python

from office_oxide import Document

with Document.open("report.docx") as doc:
    text = doc.plain_text()
    md   = doc.to_markdown()

JavaScript

import { Document } from 'office-oxide';

using doc = Document.open('report.docx');
const text = doc.plainText();
const md   = doc.toMarkdown();

Was du pro Format bekommst

Format Ausgabe
DOCX Body-Text in Dokumentreihenfolge + Kopf-/Fußzeilen; Soft-Hyphens entfernt
XLSX Zellwerte über alle Sheets, in der Zeile tab-getrennt, zwischen Sheets eine Leerzeile
PPTX Folientitel, Body-Platzhalter, Tabellenzellen und Notizen — ein Absatzblock pro Folie
DOC Gleiche Form wie DOCX — direkt aus der CFB-Piece-Table geparst
XLS Gleiche Form wie XLSX — direkt aus BIFF8-Records geparst
PPT Gleiche Form wie PPTX — aus dem PowerPoint-Document-Stream geparst

Aus Bytes (ohne Tempdatei)

Praktisch für Serverless- und Streaming-Pipelines.

Python

import requests
from office_oxide import Document

data = requests.get("https://example.com/report.docx").content
with Document.from_bytes(data, "docx") as doc:
    print(doc.plain_text())

JavaScript

import { Document } from 'office-oxide';

const res = await fetch('https://example.com/report.docx');
const data = new Uint8Array(await res.arrayBuffer());
using doc = Document.fromBytes(data, 'docx');
console.log(doc.plainText());

Rust

use std::io::Cursor;
use office_oxide::{Document, DocumentFormat};

let data = std::fs::read("report.docx")?;
let doc = Document::from_reader(Cursor::new(data), DocumentFormat::Docx)?;
let text = doc.plain_text();

Performance

Format Mittelwert p99 Pass-Rate
DOCX (2.538 Dateien) 0,8 ms 3,9 ms 98,9 %
XLSX (1.802 Dateien) 5,0 ms 40 ms 97,8 %
PPTX (806 Dateien) 0,7 ms 3,9 ms 98,4 %
DOC (246 Dateien) 0,3 ms 3,4 ms 94,7 %
XLS (494 Dateien) 2,8 ms 75 ms 99,2 %
PPT (176 Dateien) 0,7 ms 6,6 ms 100 %

Volle Methodik unter Performance.

Siehe auch