全部技能 / 文档与知识 / read-docx-review
文档与知识 · daymade/claude-code-skills

read-docx-review

读取 Word/WPS 审阅后的 docx,把批注(comments)与修订(track changes)提取成可逐条裁决的 markdown 对账表或 JSON。触发场景:对方批注完的合同/协议/书稿/报告回来了要读意见;「提取 docx 批注」「审阅意见对账」「读一下修订」「谁批了什么、批在哪」;WPS 云文档/Word 在线协作 导出的审阅稿;收到带修订模式改动的回稿要看对方改了什么。核心保证:修订感知——python-docx 裸读会漏掉修订插入(w:ins)的内容、认不出整段删除(w:del),本 skill 走 OpenXML SDK 引擎 不漏。只读,不改对方文件。边界:生成/排版 docx → docx-creator 或 minimax-docx;PDF 批注不在范围。

风险提醒:蓝色 · 知晓即可AI 侦查报告
作者 daymadeGitHub daymade/claude-code-skills ↗Stars 1385许可 MIT(仓库根 LICENSE;Copyright (c) 2025 daymade;GitHub API spdx MIT)commit d5c4678cb5
agent 宿主通常会约束 skill 执行权限;风险提醒为 AI 侦查观点,不构成质量或安全保证。第三方 skill 仅作拆解与展示,安装使用风险自负,版权归原作者。

1实现原理 · 为什么它能做到

核心卖点是『修订感知』:python-docx 裸读会漏修订插入(w:ins 包装的子 run)与整段删除(w:del 包段落标记),所以引擎不走 python-docx,而用官方 OpenXML SDK 的 csx 脚本把 ins/del/move 当一等公民读。

daymade-docs/read-docx-review/SKILL.md
python-docx 的 `paragraph.text` 走 `paragraph.runs`,runs 只取直接子 `<w:r>`、不递归 `<w:ins>` 包装——**对方用修订模式插入的所有内容都会被漏读**
注:裸 lxml 的 .//w:t 能读到 ins 但认不出 w:del 包住的整段(接受修订后整段消失的内容仍有 w:t)——两个方向的漏读都在真实出版审阅稿上踩过,SKILL 记录了这段决策史。

架构 = Python 编排壳 + C# dotnet-script 引擎:docx_bridge_client.py 无状态直读 docx,subprocess 调 csharp/tasks/*.csx(list_comments/list_revisions/extract_views),结果按 (路径+mtime) 做内存 LRU 缓存。

daymade-docs/read-docx-review/scripts/bridge_lib/docx_bridge_client.py
cmd = ["dotnet-script", str(script), "--", str(docx), *extra_args] proc = subprocess.run(cmd, capture_output=True, text=True, env=env)
注:client 自动把 ~/.dotnet/tools 补进 PATH、内置 DOTNET_ROLL_FORWARD=Major 兼容新 .NET;Python 侧纯 stdlib 零第三方依赖。

三个 csx 都基于 DocumentFormat.OpenXml 3.2.0(#r nuget 声明),输出 JSON/NDJSON 给 Python 渲染——解析全部在 C# 侧,Python 只编排。

daymade-docs/read-docx-review/scripts/csharp/tasks/list_comments.csx
#r "nuget: DocumentFormat.OpenXml, 3.2.0" using System.Text.Json; using DocumentFormat.OpenXml.Packaging;
注:list_comments 读 WordprocessingCommentsPart(comments.xml)+CommentsExPart(paraId→done)+document.xml 的 CommentRangeStart/CommentReference 双锚定(WPS 导出件部分批注只有 reference,实测 96 条中 6 条)。

输出是带空白『处置』列的对账表(markdown 或 --json):谁批的/批在哪段/内容/状态 + 修订逐段删改,锚定段落截断 60 字,--json 给全文。

daymade-docs/read-docx-review/SKILL.md
产出表格自带空白「处置」列——它的用途就是拿去逐条裁决。引擎提炼自作者一个真实图书出版项目的审阅工具链(2026-02 起生产验证:单文件 96 条编辑批注、整书修订处理、输入含 WPS 云文档导出件)
注:输出契约:批注按文档序、回复(replyToCommentId)缩进挂根批注;无痕迹时输出明确提示而非空表。

空结果被设计成『大声提示』而非静默空表:无批注无修订时输出「这份 docx 没有携带任何审阅痕迹」+ 两个常见原因(导出丢批注/在线未导出)——防『拿到丢了批注的副本还以为对方没意见』。

daymade-docs/read-docx-review/SKILL.md
无批注无修订时输出一段明确提示(「这份 docx 没有携带任何审阅痕迹」+两个常见原因),不会静默输出空表——拿到丢了批注的副本还以为对方没意见,比读错内容更危险。
注:Troubleshooting 表也给了排查路径(让对方重新下载/另存 docx;WPS『下载为 docx』实测保留批注与 resolved 状态)。

只读纪律写死:不提供接受/拒绝修订、回复批注或改稿再导出——对账后的改动落在用户自己的正稿源再重新生成。

daymade-docs/read-docx-review/SKILL.md
本 skill 只读。它不提供「接受/拒绝修订」「回复批注」「改正文再导出」——对账后的改动应落在你自己的正稿源(合同草案 SSOT、书稿源文件)再重新生成
注:reference csharp-tasks-spec.md 记录段落索引语义(body 直接子段、不递归表格内段,与 python-docx 对齐)供二次开发。

2核心能力

01docx 批注全量提取(作者/时间/内容/resolved 状态/回复线程/段落锚定,双锚定兼容 WPS 导出件)
02修订感知的三视图文本:accepted/rejected/display 逐段 + 内联 ins/del 与整段 ins/del 判定
03对账表(markdown)与机器可读全量(--json)双输出,锚定段落可截断可全文
04批注上下文抽取:extract_views(docx, paragraph_range=(40,55)) 拿锚定段前后 N 段
05段落级工具函数替代 python-docx:paragraph_text/paragraphs_text/iter_paragraphs(修订感知)
06无审阅痕迹的明确提示 + 原因排查(防误判对方没意见)

3外部依赖

类型依赖
clidotnet-script(csx 运行时,dotnet tool install -g)
packageDocumentFormat.OpenXml 3.2.0(NuGet,csx 首跑自动 restore 需网络 10-30s)
clidotnet SDK(brew install dotnet,宿主需装)

4风险提醒 风险提醒:蓝色 · 知晓即可

风险提醒:蓝色 · 知晓即可
  • 环境门槛:需要 .NET SDK + dotnet-script + 首次联网 NuGet — SKILL 自述首跑 10-30s、离线失败;无 .NET 环境则整套引擎不可用(无 python 侧回退,属刻意设计)。
  • 只读边界也意味着不闭环 — 只能读+对账,接受/拒绝/回复/改稿需回到正稿工具链——期望『一条命令处理完审阅』的用户会失望。
  • 解析文档型输入 — docx 是 zip+XML,经 OpenXML SDK 解析;恶意构造的 docx 依赖官方库安全性,宿主应把外部来的审阅稿当不可信输入。
  • 索引语义边界(不递归表格内段落) — 与 python-docx 对齐的 body 直接子段索引意味着表格内批注锚定需另行处理,reference 已声明但用户需知晓。
风险提醒:蓝色,知晓即可。只读型 skill:对用户 docx 只读不写,运行自带本地 python/csx,无凭证读取、无删除、无数据外发;唯一网络是首次 csx 跑时从 nuget.org 还原官方 DocumentFormat.OpenXml(SKILL 自述 10-30s、之后离线可用),外发对象官方可预期。

5第二遍独立确认

  • [ok] 修订感知引擎(csx + OpenXML SDK) — 三个 csx 均 #r 'nuget: DocumentFormat.OpenXml, 3.2.0' 并引用 WordprocessingPackage API;list_revisions/list_comments 输出 JSON。
  • [ok] Python 编排壳零第三方依赖 — docx_bridge_client.py import 仅 stdlib(subprocess/json/pathlib/functools 等);SKILL 'Python 侧纯 stdlib' 属实。
  • [ok] dotnet-script 调用链 + ROLL_FORWARD/PATH 处理 — _ensure_dotnet_script_on_path 追加 ~/.dotnet/tools、env.setdefault('DOTNET_ROLL_FORWARD','Major') 均在源码。
  • [ok] 无状态只读 + (路径,mtime) 缓存 — _cache_key 返回 (str(p), st_mtime);lru_cache 装饰器在三个读取函数上;无写 docx 代码路径。
  • [ok] python-docx 漏读叙事(w:ins/w:del) — SKILL 对 python-docx runs 直子与 w:del 段落的描述与 OpenXML 结构一致(技术事实,非夸大);reference csharp-tasks-spec 补充语义。
  • [ok] 批注双锚定(WPS 兼容) — list_comments.csx 头注释记录 CommentRangeStart 首选 + CommentReference 回退及 WPS 96 条中 6 条实测。
  • [ok] 空结果提示防假阴性 — SKILL 声明 + extract_review.py 输出契约(无批注无修订时输出提示段)。
  • [ok] 无网络外发(除 NuGet 首跑) — 脚本全量扫描无 requests/urllib/http/curl;SKILL 明示 NuGet restore 需网络且仅首次。

6结论

  • 修订感知是真差异化:绕过 python-docx 的 ins/del 盲区,用官方 OpenXML SDK 读三视图——同类批量读批注工具少见的语义保真。
  • 只读 + 无状态 + 缓存:对对方文件零副作用,可放心在审阅回稿上反复跑。
  • 生产验证背书(96 条批注/整书修订/WPS 导出件)与决策记录(为何不用社区库)让可信度可查。
  • 空结果大声提示的设计把最危险的假阴性(对方其实批过)前置防住。
  • 适合:适合合同/协议/书稿/报告的『对方批注完的回稿』读意见场景(Word/WPS 批注+修订模式),尤其出版编辑与法务;对账表+处置列天然对接逐条裁决工作流。要求 .NET 环境与一次联网首跑。
    不适合:不适合要直接改稿/接受修订的流程(只读);不适合 PDF/飞书/腾讯文档批注(范围外);不适合离线且无 .NET 的环境;表格内批注的精细化锚定超出 body 段索引语义。
    安装 agent 直装可复制
    ① 本站镜像 更新 2026-09-09
    方式 A · 人下载镜像包下载 read-docx-review.tar.gz
    sha256: 5d26333cd2cde9a9…
    方式 B · JSON 格式安装指南,复制给 agent
    安装指南
    agent 读 JSON 指南后会自动从本站下载安装,无需更多说明。
    ② 上游 GitHub · 原始来源
    能访问 GitHub?直接去上游安装(实时版,可能已更新)GitHub 原始 ↗
    本页镜像锁定 commit d5c4678cb5;上游为实时仓库。
    来源信息 GitHub 原始
    作者 / 仓库daymade / daymade/claude-code-skills
    Stars1385
    最近推送2026-09-09
    本 skill commitd5c4678cb5
    许可MIT(仓库根 LICENSE;Copyright (c) 2025 daymade;GitHub API spdx MIT)
    本站信息
    收录日期2026-09-06
    分类文档与知识
    侦查报告AI 侦查 · 2 遍 · 2026-09-06
    本站镜像与 GitHub 原始是不同来源:本站锁定 commit 快照经 /r2 分发;GitHub 为实时上游,内容可能已更新。
    同分类邻近