关于 docx
docx 技能为读取、创建和修改 Word 文档提供工作流与验证工具,面向需要处理合同、学术或业务文档的人员。它支持可审阅的修订、结构校验和页面渲染检查。
主要功能
- 01读取正文、修订和批注
- 02通过 docx-js 创建文档
- 03以修订模式编辑文档
- 04验证结构及未跟踪修改
- 05渲染页面以检查外观
适用场景
- 01审阅合同或正式文档的修改
- 02创建新的 Word 文档
- 03检查文档修订和批注
- 04确认生成文档的页面布局
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ appautomaton/ document-skills --skill docx安装后在 Claude Code 中输入/docx确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
docx-js.mdooxml.mdooxml/schemas/ecma/fourth-edition/opc-contentTypes.xsdopc-coreProperties.xsdopc-digSig.xsdopc-relationships.xsdooxml/schemas/ISO-IEC29500-4_2016/dml-chart.xsddml-chartDrawing.xsddml-diagram.xsddml-lockedCanvas.xsddml-main.xsddml-picture.xsddml-spreadsheetDrawing.xsddml-wordprocessingDrawing.xsdpml.xsdshared-additionalCharacteristics.xsdshared-bibliography.xsdshared-commonSimpleTypes.xsdshared-customXmlDataProperties.xsdshared-customXmlSchemaProperties.xsdshared-documentPropertiesCustom.xsdshared-documentPropertiesExtended.xsdshared-documentPropertiesVariantTypes.xsdshared-math.xsdshared-relationshipReference.xsdsml.xsdvml-main.xsdvml-officeDrawing.xsdvml-presentationDrawing.xsdvml-spreadsheetDrawing.xsd详细介绍
Word 文档
你已经了解 Word 的功能。这项技能补充了代码中看不到的内容:一个能正确处理修订和批注的库、可捕获未跟踪编辑的验证功能、一种查看读者实际看到的页面的方法,以及 docx-js 和 OOXML 中会悄无声息地生成损坏文件的行为。
运行脚本
<skill> 是包含此文件的目录。从用户的工作目录使用绝对路径运行打包的脚本,这样脚本文件的相对路径才能正常工作:
uv run <skill>/ooxml/scripts/unpack.py contract.docx unpacked
运行你编写的 Python 代码时,需声明其依赖项,可以使用 uv run --with defusedxml script.py 或 PEP 723 标头。运行 Node 脚本时,使用 NODE_PATH=<skill>/node_modules node build.js;如果缺少 <skill>/node_modules,请在 <skill> 中运行一次 npm install。渲染页面需要 LibreOffice(soffice)和 poppler(pdftoppm);读取文档需要 pandoc。
选择工作流
| 任务 | 使用方法 |
|---|---|
| 阅读文本 | pandoc --track-changes=all file.docx -t markdown。它还会显示修订和批注。使用 accept 或 reject 代替 all,即可查看相应的结果。 |
| 创建文档 | docx-js:先阅读 docx-js.md。其中介绍了页面大小、样式和图像相关的行为,否则这些问题可能会导致文件损坏。 |
| 编辑他人的文档,或任何法律、学术、商业或官方文档 | 使用修订,让每项编辑都可供审阅:参见下方的修订工作流。 |
| 对本次会话中创建的文档进行小幅编辑 | 使用同一个库,但不跟踪更改。完成编辑后,调用 doc.save(require_tracking=False),它仍会检查架构。若需进行较大改动,请使用 docx-js 重新生成文件。 |
| 批注、元数据、嵌入式媒体、原始结构 | 解包并读取 XML;ooxml.md 介绍了相关模式。 |
修订工作流
- 阅读。 使用 pandoc(见上文)转换文档,并列出你将进行的所有更改。根据周围的文本定位每处更改,切勿使用 Markdown 行号,因为它们与 XML 中的位置无关。
- 解包。
uv run <skill>/ooxml/scripts/unpack.py contract.docx unpacked会打印建议的 RSID。将其作为Document(..., rsid=...)的参数传入,使本次会话中的编辑共用一个修订 ID。 - 编辑。 阅读 ooxml.md,然后编写一个使用
Document库的脚本。tracked_replace(old, new)可处理大多数编辑:它会跨多个文本片段查找内容,并仅标记存在差异的词语。将相关更改分批处理,每个脚本处理几项到十几项,以便出错时容易定位。在每批编辑前再次对unpacked/word/document.xml执行 Grep,因为每次保存后行号都会变化。 - 保存。
doc.save()会拒绝写入包含未跟踪编辑或违反架构的 XML 的文档,并指出具体差异。请修复脚本,而不是跳过验证。 - 打包。
uv run <skill>/ooxml/scripts/pack.py unpacked reviewed.docx会重新打包文件,并检查 LibreOffice 是否能打开它。 - 验证。 运行
pandoc --track-changes=all reviewed.docx -t markdown,确认所有预期更改均已显示,且没有其他内容发生变化。然后检查输出(见下文)。
若要接受或拒绝现有更改,请在进行自己的编辑前调用 doc.accept_all_changes() 或 doc.reject_all_changes()。
检查输出
- 验证。
uv run <skill>/ooxml/scripts/validate.py reviewed.docx --original contract.docx会检查架构,并确认原始文档中的每项更改都已跟踪;doc.save()也会执行相同的检查。传入--author NAME,即可直接编辑该作者先前插入的内容。对于从头生成的文档,省略--original,只检查架构。 - 查看。
uv run <skill>/ooxml/scripts/render.py reviewed.docx pages会为每一页打印一个 PNG 路径(使用--pages 2-4指定页码范围)。交付你创建或重新整理的文档前,请先查看这些图像。LibreOffice 会将 docx-js 生成的目录渲染为空白;Word 打开文件时会填充目录。
会导致静默失败的陷阱
- 在其他作者的更改中进行部分编辑。 要删除他人插入内容中的文本,请将你的
<w:del>嵌套在其中。切勿直接编辑他们的文本。 - 将 pandoc 用作编辑器。 它会重写整个文档,并丢弃格式、批注和修订记录。可用它来读取,但不要用它来生成交付成果。
评论
支持 Markdown