Skip to content

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 ![alt](filename) — veja “Imagens” abaixo

Imagens

to_markdown() emite placeholders com o nome (ex.: ![](image1.png)) 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