# docparser-office
DOCX / XLSX / PPTX 后端:`zip` + `quick-xml` **流式**解析(无全局锁、无 libexpat),
解析路径为单线程流式,不引入 `rayon`。
## 安装
```bash
cargo add docparser-office # 三格式全要
cargo add docparser-office --no-default-features --features docx # 只要 Word
# 或 cargo add docparser-sdk --no-default-features --features docx
```
### 特性
| `docx` | ✅ | Word:正文段落、`w:tbl` 表格、文本框(`w:txbxContent`)、`w:tab`/`w:br` |
| `xlsx` | ✅ | Excel:多 sheet 分页、共享字符串、`numFmt` 数字/日期、逐单元格 |
| `pptx` | ✅ | PowerPoint:多 slide 分页、文本框/表格/组合形状递归/图表框 |
被裁掉的格式不注册,解析该扩展名返回 `unsupported`。三种格式共用同一套 `zip` +
`quick-xml`,所以依赖树相同(26 个),差别在编译进来的代码量:只开 `docx` 时
`rlib` 487 KB,三格式全开 938 KB。`docparser_office::FORMATS` 反映实际编译进来的格式。
## 用法
```rust
use docparser_core::{DocumentEngine, Registry};
let mut reg = Registry::new();
docparser_core::plugins::text::register_defaults(&mut reg);
docparser_office::register_defaults(&mut reg);
let doc = DocumentEngine::new(reg).parse("spec.xlsx")?;
println!("{}", docparser_core::emit::to_markdown(&doc));
```
## 覆盖范围
当前是 **raw 文本模式**:以段落为单位输出 `BlockKind::Paragraph`,不还原标题层级与列表结构。
| `.docx` | 正文段落、`w:tbl` 表格单元格文本、文本框(`w:txbxContent`)、`w:tab`/`w:br` |
| `.xlsx` | 多 sheet(每 sheet 一页)、共享字符串、`numFmt` 数字/日期格式化、逐单元格文本 |
| `.pptx` | 多 slide(每 slide 一页)、文本框、表格单元格、组合形状递归、图表框文本 |
legacy `.doc/.xls/.ppt`(OLE)不解析:`router` 会识别为 `ole`,没有对应插件时返回
`unsupported`。加密件(OLE 容器包 OOXML)在嗅探阶段即判定为 `encrypted`。
## 许可
MIT OR Apache-2.0