Converter documentos Office para Markdown
Todo handle do Office Oxide tem o método to_markdown(), que produz Markdown estilo GitHub — títulos, tabelas, listas e blocos parecidos com código — a partir de qualquer um dos seis formatos suportados. É o ponto de entrada que a maior parte dos pipelines de LLM e RAG deveria usar.
De uma chamada
Rust
use office_oxide::to_markdown;
let md = to_markdown("report.docx")?;
std::fs::write("report.md", md)?;
Python
import office_oxide
md = office_oxide.to_markdown("report.docx")
open("report.md", "w").write(md)
JavaScript
import { toMarkdown } from 'office-oxide';
import { writeFileSync } from 'node:fs';
writeFileSync('report.md', toMarkdown('report.docx'));
Go
md, err := officeoxide.ToMarkdown("report.docx")
os.WriteFile("report.md", []byte(md), 0o644)
C#
File.WriteAllText("report.md", OfficeOxide.ToMarkdown("report.docx"));
Handle reutilizável
Python
from office_oxide import Document
with Document.open("deck.pptx") as doc:
md = doc.to_markdown()
Rust
let doc = office_oxide::Document::open("deck.pptx")?;
let md = doc.to_markdown();
JavaScript
using doc = Document.open('deck.pptx');
const md = doc.toMarkdown();
O que sai
| Elemento de origem | Markdown |
|---|---|
Título DOCX (<w:pStyle w:val="Heading1"/> …) |
# Título (nível conforme o estilo) |
| Parágrafo DOCX | Um parágrafo, hífens “soft” removidos |
| Item de lista DOCX | - item ou 1. item (numeração preservada) |
| Tabela DOCX | Tabela em pipes GFM |
| Planilha XLSX | ## Nome da planilha + tabela em pipes por intervalo |
| Células mescladas em XLSX | Conteúdo da primeira célula, o span é descartado |
| Slide PPTX | ## Slide N + corpo, notas anexadas como blockquote |
| Tabela PPTX | Tabela em pipes GFM dentro do slide |
| Hyperlinks | [texto](url) |
| Imagens | placeholder  — veja “Imagens” abaixo |
Imagens
to_markdown() emite placeholders com o nome (ex.: ) mas não extrai os bytes — Markdown é texto. Para puxar as imagens, use o IR ou o acesso por formato:
from office_oxide import Document
with Document.open("report.docx") as doc:
ir = doc.to_ir()
for section in ir["sections"]:
for el in section["elements"]:
if el["kind"] == "Image":
print(el["filename"], len(el["data"]))
Esquema completo em Extração IR.
Casos de uso
- Ingestão para RAG — Markdown é o formato de entrada mais LLM-friendly. Um passe por documento, estrutura determinística, sem ruído HTML.
- Indexação de documentos — títulos dão fronteiras naturais para chunks; tabelas continuam consultáveis.
- Migrações — DOCX → Markdown para geradores de site estático (Hugo, Astro, MkDocs).
- Diff de conteúdo — diffs de Markdown são bem mais legíveis do que diffs binários de
.docx.
Performance
to_markdown() roda na mesma ordem de grandeza de plain_text() — tipicamente 1–2× o custo no documento mediano. Números completos em Performance.
Veja também
- Extração HTML — quando você quer saída estilizada
- Extração IR — JSON estruturado para pipelines mais ricos
- PDF for RAG — biblioteca companheira
pdf_oxidepara PDF