Skip to content

Converter DOC, XLS, PPT legados para OOXML

Office Oxide é a única biblioteca em Rust ou Python que lê Word 97–2003 (.doc), Excel 97–2003 (.xls) e PowerPoint 97–2003 (.ppt) e escreve seus equivalentes modernos em OOXML — sem JVM (Apache Tika), sem conversor externo (LibreOffice headless), sem licença comercial (Aspose).

save_as faz a conversão em uma chamada. Abra o arquivo legado, salve com extensão moderna; Office Oxide encaminha pelo IR e escreve um novo container OOXML.

Em uma linha

Rust

use office_oxide::Document;

Document::open("old.doc")?.save_as("modern.docx")?;
Document::open("old.xls")?.save_as("modern.xlsx")?;
Document::open("old.ppt")?.save_as("modern.pptx")?;

Python

from office_oxide import Document

with Document.open("old.doc") as doc:
    doc.save_as("modern.docx")

with Document.open("old.xls") as doc:
    doc.save_as("modern.xlsx")

with Document.open("old.ppt") as doc:
    doc.save_as("modern.pptx")

JavaScript

import { Document } from 'office-oxide';

using doc = Document.open('old.xls');
doc.saveAs('modern.xlsx');

Go

doc, _ := officeoxide.Open("old.xls")
defer doc.Close()
doc.SaveAs("modern.xlsx")

C#

using var doc = Document.Open("old.xls");
doc.SaveAs("modern.xlsx");

Migração em massa

Migre o corpus em uma só linha.

Python

from pathlib import Path
from office_oxide import Document

for src in Path("legacy").rglob("*"):
    if src.suffix.lower() in {".doc", ".xls", ".ppt"}:
        new_ext = {".doc": ".docx", ".xls": ".xlsx", ".ppt": ".pptx"}[src.suffix.lower()]
        dst = Path("modern") / src.relative_to("legacy").with_suffix(new_ext)
        dst.parent.mkdir(parents=True, exist_ok=True)
        with Document.open(src) as doc:
            doc.save_as(dst)
        print(f"{src}{dst}")

Rust

use office_oxide::Document;
use std::path::Path;

fn migrate(src: &Path, dst: &Path) -> office_oxide::Result<()> {
    Document::open(src)?.save_as(dst)?;
    Ok(())
}

Embrulhe o loop com rayon para migração paralela de grandes corpora.

Shell — usando o CLI

find legacy/ -iname '*.doc' | parallel \
  'office-oxide convert {} modern/{/.}.docx'

find legacy/ -iname '*.xls' | parallel \
  'office-oxide convert {} modern/{/.}.xlsx'

find legacy/ -iname '*.ppt' | parallel \
  'office-oxide convert {} modern/{/.}.pptx'

O que sobrevive ao round-trip

Office Oxide preserva a forma do conteúdo — parágrafos, tabelas, células, slides, listas, títulos — e os valores dentro deles. Algumas categorias não se transferem porque os formatos legados as guardam em estruturas proprietárias que o IR não modela:

Categoria Preservado Notas
Texto de parágrafos Inclui runs de bold/itálico/sublinhado
Listas Ordenadas + não ordenadas
Tabelas Células, ordem das linhas, linha de cabeçalho
Valores de células XLSX (string, número, bool)
Nomes de planilhas
Títulos de slides + corpo
Hyperlinks
Imagens parcial DOC/PPT preservam imagens inline; âncoras de imagem no XLS são descartadas
Comentários / revisões Tracked changes são achatadas
Fórmulas (XLS) só valores Resultados em cache sobrevivem; expressões de fórmula não fazem round-trip
WordArt, SmartArt, gráficos Re-renderize no formato-alvo se precisar
Criptografia Descriptografe o arquivo legado primeiro (ex.: via LibreOffice)

Para a maioria dos casos de LLM, indexação e arquivamento, o que importa é a fidelidade no nível de conteúdo — e Office Oxide entrega um DOCX/XLSX/PPTX totalmente editável em milissegundos.

Performance

Conversão por arquivo roda na mesma ordem de grandeza da extração de texto. Em um .doc típico do Word 97, espere milissegundos de um dígito de ponta a ponta.

Veja também