docx

全面的文档创建、编辑和分析功能,支持修订追踪、评论、格式保留和文本提取。当 Claude 需要处理专业文档(.docx 文件)时使用,包括:(1) 创建新文档,(2) 修改或编辑内容,(3) 使用修订追踪,(4) 添加评论,或任何其他文档任务

SKILL.md

GitHub

DOCX 创建、编辑与分析

.docx/.dotx 是包含 OOXML 的 ZIP 包。按任务选择路径:

任务 方法
新建 Word 使用 docx npm 包生成
修改现有 Word 解包 → 合并碎片 run → 精确改 XML → 重新压缩
读取内容 pandoc -t markdown file.docx

本文命令中的脚本路径均相对于本 Skill 目录。

中文任务先判断交付语境

  • 中文内部报告通常使用 A4;政府/企事业公文、合同或既有模板必须优先遵循用户提供的版式。
  • 用户没指定字体时,先选择目标环境可用的中文字体,如微软雅黑、思源黑体/宋体;不要假定所有机器都有同一字体。
  • “正式一点”不等于堆装饰。优先保证标题层级、段落间距、表格可读性、页码和目录正确。

Few-shot

输入:“把这份项目复盘整理成一份给管理层看的 Word,包含目录、风险表和下一步。”

**执行:**新建 A4 文档,使用内置标题级别生成目录,将风险整理成可读表格,渲染所有页面检查分页和中文字体,再交付 .docx。

输入:“合同.docx 的付款周期从 30 天改成 45 天,必须保留修订痕迹。”

**执行:**解包并合并碎片 run,只标记最小变更片段,使用用户指定作者名写入 <w:ins>/<w:del>,再用原合同做红线校验。

新建文档

docx 通常已预装。先直接 require("docx"),只有导入失败时才安装。

常见高风险点:

  • docx 默认 A4;美式 Letter 显式设置 12240 × 15840 DXA。
  • 横向页面传入竖向宽高,再设 PageOrientation.LANDSCAPE,库会交换尺寸。
  • 表格同时设置表级 columnWidths 和每个单元格的 DXA width,两者总宽一致。
  • 阴影使用 ShadingType.CLEAR,不要使用会渲染成黑色的 SOLID。
  • 列表使用 numbering 和 LevelFormat.BULLET,不要把 • 写进正文。
  • ImageRun 必须提供 type;图片还应有可理解的替代文本。
  • PageBreak 必须放在 Paragraph 内;换段不要在文本中写 \n。
  • 目录依赖内置 HeadingLevel.*;自定义标题样式需要正确的 outlineLevel。
  • 分割线用段落下边框,不要用单行表格模拟。

生成后先渲染,再检查:

python scripts/office/soffice.py --headless --convert-to pdf output.docx
pdftoppm -jpeg -r 100 output.pdf page
ls page-*.jpg

检查中文字体回退、目录、页码、表格跨页、孤行和图片裁切。

编辑现有文档

旧 .doc 先转换:

python scripts/office/soffice.py --headless --convert-to docx file.doc

外部 Word 文件是不可信输入。解包后先移除符号链接,再合并被 Word 拆碎的 run:

unzip -q document.docx -d unpacked/
find unpacked -type l -delete
python scripts/merge_runs.py unpacked/
# 精确编辑 unpacked/word/document.xml;不要 pretty-print 或重排无关 XML
(cd unpacked && rm -f ../output.docx && zip -Xr ../output.docx .)
python scripts/office/validate.py output.docx --original document.docx

merge_runs.py 让视觉上连续、XML 中却被拆开的文字可查找。也可直接处理文件:

python scripts/merge_runs.py document.docx -o merged.docx

修订模式

涉及合同审阅、红线稿或“保留修改痕迹”时:

  • 插入使用 <w:ins>,删除使用 <w:del>。
  • 删除内容内部使用 <w:delText>,不是 <w:t>。
  • w:id、w:author、w:date 必须完整;作者名服从用户要求,不默认冒用他人。
  • 只包裹最小修改范围,避免整段重写。
  • 删除段落还需标记段落结束符,否则接受修订后可能留下空项目符号。

验证时同时传入原文件和作者:

python scripts/office/validate.py output.docx \
  --original document.docx \
  --author "修订作者"

生成接受全部修订的净稿:

python scripts/accept_changes.py input.docx clean.docx

批注

批注需要多份交叉引用 XML,使用脚本生成,不手工拼接整套结构:

python scripts/comment.py unpacked/ "付款条件需要法务确认"
python scripts/comment.py unpacked/ "已补充依据" --parent 0

脚本会打印要放入 word/document.xml 的范围标记。未插入 commentRangeStart、commentRangeEnd 和 commentReference 时,批注文件存在但 Word 中不可见。

最终验收

  1. pandoc 抽取内容,确认文字、标题和顺序。
  2. validate.py --original 检查 schema、关系和非预期改动。
  3. 渲染 PDF 和逐页图片,检查中文排版。
  4. 修订任务同时检查“显示修订”和“接受修订”两种视图。

依赖

docx(npm) · pandoc · LibreOffice · Poppler (pdftoppm) · defusedxml