mcpField
D
Docx

Docx

github.com/danielmiessler文档处理19.6k68 次安装2 天前更新
代码仓库

关于 Docx

Docx 是用于创建、编辑和分析 Word 文档的 Skill,涵盖文档生成指导及 OOXML 工作流,可提取内容、处理修订、检查结构并转换格式。

主要功能

  1. 01创建格式化 DOCX 文件
  2. 02使用 OOXML 编辑现有文档
  3. 03通过修订模式审阅更改
  4. 04提取文本并检查文档结构
  5. 05将文档转换为 PDF 或图像

适用场景

  1. 01生成含表格或图像的 Word 文档
  2. 02通过修订模式修改合同
  3. 03提取 DOCX 文本和批注
  4. 04渲染页面以进行视觉审阅

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/danielmiessler/lifeos --skill docx

安装后在 Claude Code 中输入/docx确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

LICENSE.txt
docx-js.md
ooxml.md
Ooxml/Scripts/
validate.py
unpack.py
pack.py
Scripts/
__init__.py
utilities.py
document.py

详细介绍

DOCX 创建、编辑和分析

🎯 加载完整的 PAI 上下文

使用此技能执行任何任务前,请先加载完整的 PAI 上下文:

read ~/.claude/PAI/SKILL.md

其中包含:

  • 完整联系人列表(Angela、Bunny、Saša、Greg 和团队成员)
  • 技术栈偏好(TypeScript>Python、bun>npm、uv>pip)
  • 安全规则和仓库安全协议
  • 回复格式要求(结构化表情符号格式)
  • Agent 路由的语音 ID(ElevenLabs)
  • 个人偏好和操作说明

何时启用此技能

创建 Word 文档
  • 用户说“创建 Word 文档”“新建 docx”或“制作文档”
  • 用户想从头开始生成专业文档
  • 用户需要带表格、图片或复杂布局的格式化文档
编辑 Word 文档
  • 用户说“编辑 Word 文档”“修改 docx”或“更新文档”
  • 用户提到“修订”“红线标注”或“文档审阅”
  • 用户想在现有 .docx 文件中添加、删除或修改内容
  • 用户需要处理批注、格式或文档结构
阅读和分析文档
  • 用户说“读取 docx”“从 Word 中提取文本”或“分析文档”
  • 用户想查看修订、批注或文档元数据
  • 用户需要将文档转换为其他格式(markdown、PDF、图片)
  • 用户想检查文档结构或原始 OOXML
上下文触发
  • 用户提供 .docx 文件或 Word 文档路径
  • 用户正在处理专业、法律、学术或商业文档
  • 用户需要保留格式、跟踪修订或维护文档完整性

概述

用户可能会要求你创建、编辑或分析 .docx 文件的内容。.docx 文件本质上是一个包含 XML 文件和其他资源的 ZIP 压缩包,你可以读取或编辑这些内容。针对不同任务,你可以使用不同的工具和工作流。

工作流决策树

阅读/分析内容

使用下文的“文本提取”或“原始 XML 访问”部分

创建新文档

使用“创建新的 Word 文档”工作流

编辑现有文档
  • 你自己的文档 + 简单修改 使用“基本 OOXML 编辑”工作流

  • 他人的文档 使用**“修订工作流”**(推荐默认方式)

  • 法律、学术、商业或政府文档 使用**“修订工作流”**(必需)

阅读和分析内容

文本提取

如果只需要读取文档文本内容,应使用 pandoc 将文档转换为 markdown。Pandoc 对保留文档结构的支持出色,还能显示修订:

# Convert document to markdown with tracked changes
pandoc --track-changes=all path-to-file.docx -o output.md
# Options: --track-changes=accept/reject/all
原始 XML 访问

以下内容需要访问原始 XML:批注、复杂格式、文档结构、嵌入媒体和元数据。要处理其中任何一项,都需要解包文档并读取其原始 XML 内容。

解包文件

python ooxml/Scripts/unpack.py <office_file> <output_directory>

关键文件结构
  • word/document.xml - 文档主要内容
  • word/comments.xml - document.xml 中引用的批注
  • word/media/ - 嵌入的图片和媒体文件
  • 修订使用 <w:ins>(插入)和 <w:del>(删除)标签

创建新的 Word 文档

从头创建新的 Word 文档时,请使用 docx-js,它支持通过 JavaScript/TypeScript 创建 Word 文档。

工作流
  1. 必须 - 阅读整个文件:从头到尾完整阅读 docx-js.md(约 500 行)。**读取此文件时,绝不要设置任何范围限制。**开始创建文档前,请阅读完整文件内容,了解详细语法、关键格式规则和最佳实践。
  2. 使用 Document、Paragraph、TextRun 组件创建 JavaScript/TypeScript 文件(可以假设所有依赖都已安装;如果没有,请参阅下文的依赖部分)
  3. 使用 Packer.toBuffer() 导出为 .docx 文件

编辑现有 Word 文档

编辑现有 Word 文档时,请使用文档库(用于操作 OOXML 的 Python 库)。该库会自动处理基础设施设置,并提供文档操作方法。对于复杂场景,你可以通过该库直接访问底层 DOM。

工作流
  1. 必须——读取整个文件:从头到尾完整阅读 ooxml.md(约 600 行)。**读取此文件时绝不设置任何范围限制。**阅读完整文件内容,了解文档库 API 和直接编辑文档文件的 XML 模式。
  2. 解包文档:python ooxml/Scripts/unpack.py <office_file> <output_directory>
  3. 使用文档库创建并运行 Python 脚本(参见 ooxml.md 中的“文档库”部分)
  4. 打包最终文档:python ooxml/Scripts/pack.py <input_directory> <office_file>

文档库既提供适用于常见操作的高级方法,也支持在复杂场景中直接访问 DOM。

文档审阅的修订流程

此工作流支持你先使用 Markdown 规划全面的跟踪修订,再在 OOXML 中实施。**重要:**要完整实现跟踪修订,必须有条理地实施所有更改。

分批策略:将相关更改分成每批 3–10 项。这样既能提高效率,又便于调试。完成每批测试后,再继续下一批。

原则:最少且精准的编辑 实施跟踪修订时,只标记实际更改的文本。重复未更改的文本会增加审阅难度,也显得不专业。将替换拆分为:[未更改文本] + [删除] + [插入] + [未更改文本]。对于未更改的文本,应从原始内容中提取 <w:r> 元素并重复使用,以保留原始 run 的 RSID。

示例——将句子中的“30 days”改为“60 days”:

# BAD - Replaces entire sentence
'<w:del><w:r><w:delText>The term is 30 days.</w:delText></w:r></w:del><w:ins><w:r><w:t>The term is 60 days.</w:t></w:r></w:ins>'

# GOOD - Only marks what changed, preserves original <w:r> for unchanged text
'<w:r w:rsidR="00AB12CD"><w:t>The term is </w:t></w:r><w:del><w:r><w:delText>30</w:delText></w:r></w:del><w:ins><w:r><w:t>60</w:t></w:r></w:ins><w:r w:rsidR="00AB12CD"><w:t> days.</w:t></w:r>'
修订工作流
  1. 获取 Markdown 表示形式:将文档转换为 Markdown,同时保留修订:

    pandoc --track-changes=all path-to-file.docx -o current.md
    
  2. 识别并分组更改:检查文档并识别所有需要进行的更改,将其整理为逻辑批次:

    定位方法(用于在 XML 中查找更改):

    • 章节/标题编号(例如,“第 3.2 节”“第 IV 条”)
    • 段落标识符(如果有编号)
    • 带有唯一上下文文本的 Grep 模式
    • 文档结构(例如,“第一段”“签名栏”)
    • 不要使用 Markdown 行号——行号无法对应到 XML 结构

    批次组织方式(每批分组 3–10 项相关更改):

    • 按章节:“批次 1:第 2 节修订”“批次 2:第 5 节更新”
    • 按类型:“批次 1:日期更正”“批次 2:当事方名称更改”
    • 按复杂度:先进行简单的文本替换,再处理复杂的结构性更改
    • 按顺序:“批次 1:第 1–3 页”“批次 2:第 4–6 页”
  3. 阅读文档并解包:

    • 必须完整阅读整个文件:从头到尾完整阅读 ooxml.md(约 600 行)。**阅读此文件时,绝不要设置任何范围限制。**特别留意“Document Library”和“Tracked Change Patterns”章节。
    • 解包文档:python ooxml/Scripts/unpack.py <file.docx> <dir>
    • 记下建议的 RSID:解包脚本会建议一个用于修订的 RSID。复制该 RSID,以便在步骤 4b 中使用。
  4. 分批实施更改:按逻辑分组(按章节、类型或位置邻近程度),并在单个脚本中一并实施。此方法能够:

    • 便于调试(批次越小,越容易定位错误)
    • 支持逐步推进
    • 提高效率(每批处理 3–10 项更改效果较好)

    建议的批次分组方式:

    • 按文档章节(例如,“第 3 节更改”“定义”“终止条款”)
    • 按更改类型(例如,“日期更改”“当事方名称更新”“法律术语替换”)
    • 按位置邻近程度(例如,“第 1–3 页的更改”“文档前半部分的更改”)

    对于每批相关更改:

    a. 将文本映射到 XML:在 word/document.xml 中 Grep 文本,确认文本在 <w:r> 元素之间如何拆分。

    b. 创建并运行脚本:使用 get_node 查找节点、实施更改,然后调用 doc.save()。有关模式,请参阅 ooxml.md 中的 “Document Library” 章节。

    注意:编写脚本之前,务必立即对 word/document.xml 执行 Grep,以获取当前行号并核实文本内容。每次运行脚本后,行号都会改变。

  5. 打包文档:完成所有批次后,将解包后的目录转换回 .docx:

    python ooxml/Scripts/pack.py unpacked reviewed-document.docx
    
  6. 最终核验:全面检查完整文档:

    • 将最终文档转换为 Markdown:
      pandoc --track-changes=all reviewed-document.docx -o verification.md
      
    • 核验所有更改均已正确应用:
      grep "original phrase" verification.md  # 不应找到该文本
      grep "replacement phrase" verification.md  # 应找到该文本
      
    • 检查是否引入了非预期更改

将文档转换为图像

如需直观分析 Word 文档,请按以下两个步骤将其转换为图像:

  1. 将 DOCX 转换为 PDF:

    soffice --headless --convert-to pdf document.docx
    
  2. 将 PDF 页面转换为 JPEG 图像:

    pdftoppm -jpeg -r 150 document.pdf page
    

    这会生成 page-1.jpg、page-2.jpg 等文件。

选项:

  • -r 150:将分辨率设为 150 DPI(可根据质量和文件大小之间的平衡进行调整)
  • -jpeg:输出 JPEG 格式(如需 PNG,可使用 -png)
  • -f N:要转换的起始页(例如,-f 2 从第 2 页开始)
  • -l N:要转换的末页(例如,-l 5 转换到第 5 页为止)
  • page:输出文件的前缀

指定范围的示例:

pdftoppm -jpeg -r 150 -f 2 -l 5 document.pdf page  # Converts only pages 2-5

代码风格指南

重要:生成用于 DOCX 操作的代码时:

  • 编写简洁的代码
  • 避免冗长的变量名和冗余操作
  • 避免不必要的打印语句

示例

示例 1:从头创建文档

User: "Create a Word doc with my consulting proposal"
→ Reads docx-js.md for syntax
→ Builds document with headers, body text, tables
→ Exports .docx file to specified location

示例 2:审阅合同并标注修订

User: "Add tracked changes to this contract - change the payment terms"
→ Unpacks document, reads ooxml.md
→ Implements tracked changes with proper <w:ins>/<w:del> tags
→ Repacks document with visible redlines for review

示例 3:从 Word 文件中提取内容

User: "What's in this Word doc?"
→ Converts to markdown using pandoc
→ Preserves tracked changes and structure
→ Returns readable text with formatting preserved

依赖项

必需的依赖项(如尚未安装,请安装):

  • pandoc:sudo apt-get install pandoc(用于提取文本)
  • docx:npm install -g docx(用于创建新文档)
  • LibreOffice:sudo apt-get install libreoffice(用于转换为 PDF)
  • Poppler:sudo apt-get install poppler-utils(用于使用 pdftoppm 将 PDF 转换为图像)
  • defusedxml:pip install defusedxml(用于安全地解析 XML)

评论

支持 Markdown