从 Office 文档提取文本
Office Oxide 只用一个入口 — extract_text()(或 Document.open(...).plain_text()) — DOCX、XLSX、PPTX 与旧版 DOC、XLS、PPT 使用同一接口。无需按格式分别处理。
一次性辅助函数
最简单的方式:一行代码完成打开、提取、返回。
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");
复用句柄
如果你既要文本又要其他输出(Markdown、HTML、IR),就一次打开、复用句柄:
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();
各格式的输出
| 格式 | 输出 |
|---|---|
| DOCX | 按文档顺序的正文 + 页眉页脚;去除软连字符 |
| XLSX | 每个工作表的单元格值,行内用制表符分隔,工作表之间空一行 |
| PPTX | 幻灯片标题、正文占位符、表格单元格和备注 — 每张幻灯片一段 |
| DOC | 与 DOCX 形态相同 — 直接从 CFB piece-table 解析 |
| XLS | 与 XLSX 形态相同 — 直接从 BIFF8 记录解析 |
| PPT | 与 PPTX 形态相同 — 从 PowerPoint Document 流解析 |
从字节(无需临时文件)
适合无服务器与流式管道。
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();
性能
| 格式 | 均值 | p99 | 通过率 |
|---|---|---|---|
| DOCX(2,538 个文件) | 0.8ms | 3.9ms | 98.9% |
| XLSX(1,802 个文件) | 5.0ms | 40ms | 97.8% |
| PPTX(806 个文件) | 0.7ms | 3.9ms | 98.4% |
| DOC(246 个文件) | 0.3ms | 3.4ms | 94.7% |
| XLS(494 个文件) | 2.8ms | 75ms | 99.2% |
| PPT(176 个文件) | 0.7ms | 6.6ms | 100% |
完整基准方法见 性能。
相关链接
- Markdown 提取 — 同一 API,GitHub Flavored 输出
- HTML 提取 — 用于预览和嵌入的语义 HTML
- 与格式无关的 IR — 给管道和 LLM 的结构化 JSON
- 表格 — 从 XLSX、DOCX、PPTX 提取结构化行