Extrair texto de documentos Office
Office Oxide oferece um único ponto de entrada — extract_text() (ou Document.open(...).plain_text()) — que funciona da mesma forma para DOCX, XLSX, PPTX, DOC, XLS e PPT. Nada de caminhos específicos por formato.
Helper de uma chamada
O caminho mais rápido: uma função abre o arquivo, roda o extrator certo para o formato e devolve uma string.
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");
Handle reutilizável
Se você precisa de texto e também de outras saídas (Markdown, HTML, IR), abra o documento uma vez e reutilize o handle:
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();
O que sai por formato
| Formato | Saída |
|---|---|
| DOCX | Texto do corpo na ordem do documento + cabeçalhos e rodapés; hífens “soft” são removidos |
| XLSX | Valores das células em todas as planilhas, separados por tab dentro da linha, linha vazia entre planilhas |
| PPTX | Título do slide, placeholders de corpo, células de tabela e notas — um bloco por slide |
| DOC | Mesma forma do DOCX — parse direto da piece-table do CFB |
| XLS | Mesma forma do XLSX — parse direto dos registros BIFF8 |
| PPT | Mesma forma do PPTX — parse a partir do stream PowerPoint Document |
A partir de bytes (sem arquivo temporário)
Útil em pipelines serverless e de streaming.
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
| Formato | Média | p99 | Taxa de sucesso |
|---|---|---|---|
| DOCX (2.538 arquivos) | 0,8 ms | 3,9 ms | 98,9% |
| XLSX (1.802 arquivos) | 5,0 ms | 40 ms | 97,8% |
| PPTX (806 arquivos) | 0,7 ms | 3,9 ms | 98,4% |
| DOC (246 arquivos) | 0,3 ms | 3,4 ms | 94,7% |
| XLS (494 arquivos) | 2,8 ms | 75 ms | 99,2% |
| PPT (176 arquivos) | 0,7 ms | 6,6 ms | 100% |
Veja a metodologia completa em Performance.
Veja também
- Extração de Markdown — mesma API, saída GitHub Flavored
- Extração de HTML — HTML semântico para preview e embed
- IR independente de formato — JSON estruturado para pipelines e LLMs
- Tabelas — linhas estruturadas a partir de XLSX, DOCX, PPTX