mcpField
D
docx

docx

github.com/tfriedel文档处理8441.8k 次安装30 周前更新
代码仓库

关于 docx

docx 是用于创建、编辑和分析 Word 文档的技能,涵盖文本提取、OOXML 访问、修订跟踪和文档转换工作流。

主要功能

  1. 01DOCX 文本提取与分析
  2. 02访问原始 XML 文档细节
  3. 03创建新文档的工作流
  4. 04使用 OOXML 工具编辑
  5. 05修订跟踪审阅工作流
  6. 06将文档转换为图像的步骤

适用场景

  1. 01提取 DOCX 文本和修订记录
  2. 02使用修订跟踪编辑商务或法律文档
  3. 03将文档页面转换为图像

安装

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

$npx skills add https://github.com/tfriedel/claude-office-skills --skill docx

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

包含的文件

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

docx-js.md
ooxml.md
ooxml/schemas/ecma/fouth-edition/
opc-contentTypes.xsd
opc-coreProperties.xsd
opc-digSig.xsd
opc-relationships.xsd
ooxml/schemas/ISO-IEC29500-4_2016/
dml-chart.xsd
dml-chartDrawing.xsd
dml-diagram.xsd
dml-lockedCanvas.xsd
dml-main.xsd
dml-picture.xsd
dml-spreadsheetDrawing.xsd
dml-wordprocessingDrawing.xsd
pml.xsd
shared-additionalCharacteristics.xsd
shared-bibliography.xsd
shared-commonSimpleTypes.xsd
shared-customXmlDataProperties.xsd
shared-customXmlSchemaProperties.xsd
shared-documentPropertiesCustom.xsd
shared-documentPropertiesExtended.xsd
shared-documentPropertiesVariantTypes.xsd
shared-math.xsd
shared-relationshipReference.xsd
sml.xsd
vml-main.xsd
vml-officeDrawing.xsd
vml-presentationDrawing.xsd
vml-spreadsheetDrawing.xsd

详细介绍

DOCX 的创建、编辑与分析

概述

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

工作流决策树

阅读/分析内容

使用下方的“文本提取”或“原始 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 文档时,使用 Document 库(用于操作 OOXML 的 Python 库)。该库会自动处理基础设施设置,并提供文档操作方法。对于复杂场景,你可以通过该库直接访问底层 DOM。

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

Document 库既提供适用于常见操作的高级方法,也支持在复杂场景中直接访问 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 操作生成代码时:

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

依赖项

所需依赖项(如果尚未安装,请安装):

  • 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