Skip to content

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