Skip to content

从 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%

完整基准方法见 性能

相关链接