editing-office-docslisted
Install: claude install-skill Luohao-Yan/luohao-skills
# Editing Office docs
程序化编辑 Word `.doc`/`.docx` 的可复用技法。核心链路是 **读 → 改 → 校验**:
用 LibreOffice 把二进制 `.doc` 转成 `.docx`,用 python-docx 在指定锚点插入
章节/段落/表格(必要时加黄色高亮标记修改处),转回 `.doc` 交付,**再从最终
交付物重新提取确认内容真的落地**。
可复用工具与踩坑详解见同目录 `scripts/docx_tools.py` 和
`references/python-docx-gotchas.md`。先读本文件建立整体认识,动手时再翻参考。
## 非协商契约:必须从最终交付物校验
**`build` 脚本打印 "saved / 完成" 不代表内容进了交付文件。** python-docx
在锚点处插段落+表格时,顺序会乱、内容会丢、样式会错——而 `.save()` 照样
成功返回,不报任何错。本 skill 的全部价值在于:**交付前,把最终 `.doc`
重新转 `.docx`、提取大纲与正文,逐条断言每个应插入片段都真实存在且顺序正确。**
这一步省掉 = 把可能内容丢失的文件交出去,还自信地说"已完成"。这是最严重
的错误,不可省。
## 何时用 / 何时不用
**用:**
- 往已有结构化 Word 文档补章节、补表格、补段落(如按审计意见补充设计说明)
- 源文件是旧版二进制 `.doc`(python-docx 读不了)
- 要把修改处用高亮标出来给人审阅
- 批量、可复现地改文档(手工改易错且不可重现)
**不用:**
- 只改几个字、调格式 → 直接 Word 手工改更快
- 纯新文档从零写 → 直接 `python-docx` 顺序构建即可,无需本 skill 的锚点插入
- 需要 Word 专属功能(复杂样式、修订模式 track-changes、目录域自动更新)
→ python-docx 不擅长,说明局限后用 Word 手工或其它工具
## 工作流
| 步骤 | 做什么 | 工具 |
|---|---|---|
| 1. 读 | `.doc` → `convert(...,'docx')` → `extract_outline` 摸清章节结构与锚点 | `docx_tools.convert/extract_outline` |
| 2. 定锚点 | 用现有章节标题文本 `find_para_exact` 定位插入位置 | `find_para_exact/contains` |
| 3. 组织 blocks | 要插的内容写成 `[('h',级别,标题),('p',正文),('table',行数据)]` | — |
| 4. 插入 | `insert_blocks_before(锚点, blocks, highlight=True)` 或 `append_blocks` | **游标法**,见下 |
| 5. 存 + 转回 | `.save()` → `convert(...,'doc')` 覆盖交付 | `convert` |
| 6. 校验 | `verify_landed(最终doc, 应有片段)` → 必须全中 | `verify_landed` |
## 最关键的几个坑(内联,详见 references)
**1. `.doc` 是二进制,python-docx 读不了。** 必须先 `convert(in,'docx',outdir)