CZOA Word 批注转 Excel 两份复杂文档全量核对

· 半格 实操笔记

CZOA Word 批注转 Excel 实测:
200 条记录、2600 个字段全量核对

把 Word 批注导出到 Excel,不只是复制正文。主批注、回复、作者、日期、状态、线程关系、锚定文字和段落位置都要对应原始 DOCX。这次用两份复杂文档完成导出,再用不调用 CZOA 代码的 Python 程序逐条比较 DOCX 与 XLSX。

视频 10 分钟;英文配音、中文字幕,点击播放后加载 1080p 网页预览。

1. 测试结论

测试文件主批注回复已解决未解决比较字段结果
综合压力测试文档703026741,300PASS
CNN 文章测试文档505026741,300PASS
合计12080521482,600两轮通过

两份 DOCX 的 200 条记录和 2,600 个字段全部一致;XLSX 中没有由批注文字生成的可执行公式。

结论只覆盖本文提供的两份 DOCX、对应 XLSX 及其文件哈希,不代表未经测试的所有 DOCX 都必然得到相同结果。

2. 下载两组完整测试文件

测试一:综合压力文档

这份文档覆盖普通段落、表格、高亮文字、多位审阅者、主批注、回复、已解决和未解决线程,以及以 = 和超链接表达式开头的批注文字。

Word 网页版中的综合压力测试文档和批注
综合压力测试文档在 Word 网页版中的批注。点击可查看大图。

测试二:CNN 文章文档

这份文档包含长篇正文、图片、链接、引语、50 个主批注和 50 条回复。可识别检查点是文章结尾的 been updated with additional,导出表格最后一行应保留这段锚定文字及对应回复。

CNN 文章测试文档在 Word 网页版中的最后一个批注线程
Word 网页版中的 CNN 文档和最后一个批注线程。点击可查看大图。

原始报道页面来自 CNN。测试附件用于验证文档处理流程,报道内容版权归原发布方。

独立核对程序

下载 verify_export_independent.py。程序只使用 Python 标准库,不需要 pip install。它把 DOCX 和 XLSX 当作 ZIP/OOXML 包读取,不调用 CZOA 代码,也不读取预先准备的正确答案清单。

3. 在 CZOA 导出 XLSX

  1. 打开 CZOA Word Comments to Excel
  2. 点击 Choose DOCX,选择一份测试 DOCX。
  3. 等待浏览器解析完成。
  4. 检查 Records、Threads、Replies、Resolved 和 Open 数量。
  5. 点击 Download XLSX
  6. 对第二份 DOCX 重复以上步骤。
CZOA Word Comments to Excel 工具页面
CZOA 工具在浏览器本地解析 DOCX,并生成 XLSX。
查看第一份文件的汇总
第一份文件显示 100 条记录、70 个线程和 30 条回复
第一份文件:100 条记录、70 个线程、30 条回复、26 条已解决、74 条未解决。
查看第二份文件的汇总
第二份文件显示 100 条记录、50 个线程和 50 条回复
第二份文件:100 条记录、50 个线程、50 条回复、26 条已解决、74 条未解决。

4. macOS / Linux:完整核对指令

下载并解压 完整测试包。下面假设解压后的文件夹位于 ~/Downloads/czoa-word-comments

目录检查、哈希、两轮全量核对
完整 macOS / Linux 指令
cd ~/Downloads/czoa-word-comments
python3 --version
ls -lh

shasum -a 256 \
  review-stress-100-word-web-validated.docx \
  review-stress-100-word-web-validated_comments.xlsx \
  cnn-archived-article-100-comments-word-web-validated.docx \
  cnn-archived-article-100-comments-word-web-validated_comments.xlsx \
  verify_export_independent.py

set -euo pipefail

python3 verify_export_independent.py \
  review-stress-100-word-web-validated.docx \
  review-stress-100-word-web-validated_comments.xlsx

python3 verify_export_independent.py \
  cnn-archived-article-100-comments-word-web-validated.docx \
  cnn-archived-article-100-comments-word-web-validated_comments.xlsx

echo "BOTH TESTS PASSED"

建议使用 Python 3.9 或更高版本。set -euo pipefail 会让终端在任意一次核对失败时立即停止,所以只有两次程序都返回退出码 0,才会显示 BOTH TESTS PASSED

五个文件的 SHA-256

9cf7e4929e42139ac27c3ba8486d938586540d3be76177314f4477b720715caa  review-stress-100-word-web-validated.docx
96260111fe9d1cd1b5aba816277fc52ede47d4bf3c50e8420b5fa42ceb75cc3c  review-stress-100-word-web-validated_comments.xlsx
dd757f241ebf960ff69de109e9db2dd4c8072b90f8c8f268742faf013149e893  cnn-archived-article-100-comments-word-web-validated.docx
53af5d36d31bcd0f46b532f3a45af6a083bab8a3d2d02ed61a01e3e770c1c880  cnn-archived-article-100-comments-word-web-validated_comments.xlsx
4e730f5a077b0b205635f08b03581d9888d386aed1ad852b41b842cac4df7c31  verify_export_independent.py

第一份文件的预期输出

DOCX SHA256: 9cf7e4929e42139ac27c3ba8486d938586540d3be76177314f4477b720715caa
XLSX SHA256: 96260111fe9d1cd1b5aba816277fc52ede47d4bf3c50e8420b5fa42ceb75cc3c
DOCX comment records: 100; XLSX rows: 100
DOCX types: {'Comment': 70, 'Reply': 30}
DOCX status: {'Resolved': 26, 'Open': 74}
Fields compared: 1300
PASS: all source comments and all 13 exported fields match; no formulas
综合压力测试文档独立核对通过
第一份文件的独立核对结果。

第二份文件的预期输出

DOCX SHA256: dd757f241ebf960ff69de109e9db2dd4c8072b90f8c8f268742faf013149e893
XLSX SHA256: 53af5d36d31bcd0f46b532f3a45af6a083bab8a3d2d02ed61a01e3e770c1c880
DOCX comment records: 100; XLSX rows: 100
DOCX types: {'Comment': 50, 'Reply': 50}
DOCX status: {'Resolved': 26, 'Open': 74}
Fields compared: 1300
PASS: all source comments and all 13 exported fields match; no formulas
CNN 文章测试文档独立核对通过
第二份文件的独立核对结果。

单独查看退出码

python3 verify_export_independent.py \
  review-stress-100-word-web-validated.docx \
  review-stress-100-word-web-validated_comments.xlsx
echo $?

5. Windows PowerShell:完整核对指令

cd "$HOME\Downloads\czoa-word-comments"
py --version
Get-ChildItem

Get-FileHash .\*.docx, .\*.xlsx, .\verify_export_independent.py -Algorithm SHA256

py .\verify_export_independent.py `
  .\review-stress-100-word-web-validated.docx `
  .\review-stress-100-word-web-validated_comments.xlsx
if ($LASTEXITCODE -ne 0) { exit $LASTEXITCODE }

py .\verify_export_independent.py `
  .\cnn-archived-article-100-comments-word-web-validated.docx `
  .\cnn-archived-article-100-comments-word-web-validated_comments.xlsx
if ($LASTEXITCODE -ne 0) { exit $LASTEXITCODE }

Write-Output "BOTH TESTS PASSED"

6. 程序到底比较什么

程序对每条记录比较 13 个字段:

1. Comment ID2. Thread ID3. Type
4. Parent Comment ID5. Status6. Author
7. Initials8. Date (UTC)9. Document area
10. Nearest heading11. Paragraph12. Referenced text
13. Comment text

它还检查记录总数、缺失或额外的 Comment ID、主批注与回复的父级和线程关系、回复自己的作者和日期、根线程的解决状态、公式单元格、重复 ZIP 成员、缺失 OOXML 部件和未闭合的批注锚点。

7. 为什么不能只看 Word 右侧批注窗格

Word 网页版把主批注和回复组合成一个讨论线程,所以界面上的讨论数量不等于 XLSX 记录行数。第一份文件显示 70 个线程,导出后有 100 行;第二份文件显示 50 个线程,导出后同样有 100 行。

人工查看仍然有价值。第二份文件最后一条记录保留了 been updated with additional 和对应审阅消息,可以与 Word 中的最后一个线程直接对应。

导出表格中最后一条回复记录与 DOCX 原始值一致
导出表格中的最后一条记录。页面显示全部 13 个字段与 DOCX 原始值一致。

人工查看能说明被看到的记录正确;本文的 PASS 来自对全部 200 条记录和 2,600 个字段的程序化比较。

8. 工具边界

两轮测试的结果一致:DOCX 源记录数与 XLSX 行数相同,全部 13 个字段逐条匹配,回复关系和状态得到保留,批注文字没有变成公式。你也可以用同一程序核对自己的 DOCX 和 CZOA 导出结果。

本文截图、视频和核对结果来自 2026 年 9 月 23 日的本地测试。网页预览视频经过压缩;下载文件保持原始测试内容。

工具:CZOA Word Comments to Excel · 原始报道:CNN