Skip to content

Convertir documentos Office a Markdown

Cada handle de Office Oxide trae el método to_markdown(), que produce Markdown estilo GitHub — títulos, tablas, listas y bloques tipo código — desde cualquiera de los seis formatos soportados. Es el punto de entrada que la mayoría de pipelines de LLM y RAG debería usar.

De una sola llamada

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 reutilizable

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();

Qué sale

Elemento origen Markdown
Título DOCX (<w:pStyle w:val="Heading1"/> …) # Título (nivel según el estilo)
Párrafo DOCX Un párrafo, se eliminan los guiones suaves
Ítem de lista DOCX - ítem o 1. ítem (numeración preservada)
Tabla DOCX Tabla en pipes GFM
Hoja XLSX ## Nombre de hoja + tabla en pipes por rango
Celdas combinadas XLSX Contenido de la primera celda, span descartado
Diapositiva PPTX ## Diapositiva N + cuerpo, notas anexadas como blockquote
Tabla PPTX Tabla en pipes GFM dentro de la diapositiva
Hyperlinks [texto](url)
Imágenes placeholder ![alt](filename) — ver “Imágenes” abajo

Imágenes

to_markdown() emite placeholders con el nombre (p. ej. ![](image1.png)) pero no extrae los bytes — Markdown es texto. Para sacar las imágenes, usa el IR o el acceso 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 en Extracción IR.

Casos de uso

  • Ingesta para RAG — Markdown es el formato más amigable para LLM. Una sola pasada por documento, estructura determinista, sin ruido HTML.
  • Indexación de documentos — los títulos dan fronteras naturales de chunk; las tablas siguen siendo consultables.
  • Migraciones — DOCX → Markdown para generadores de sitio estático (Hugo, Astro, MkDocs).
  • Diff de contenido — los diffs en Markdown son mucho más legibles que los binarios de .docx.

Rendimiento

to_markdown() corre en el mismo orden que plain_text() — normalmente 1–2× el costo en el documento mediano. Cifras completas en Rendimiento.

Véase también