ExtDiff 使用指南:3 步让 Word 自动对比两份文档
【免费下载链接】ExtDiffCompare documents using MS Word from the command line.项目地址: https://gitcode.com/gh_mirrors/ex/ExtDiff
你有没有经历过这种崩溃瞬间:同事发来一份"改好了"的 Word 文档,你打开后对着两个版本逐页翻找,眼睛都快看花了,才勉强找到几处改动?又或者,你习惯用git diff追代码变更,但仓库里混进了.docx文件,一 diff 全是乱码和 XML 标签?
ExtDiff就是为解决这个问题而生的:它是一个极小的命令行工具,通过 COM 自动化调用 Microsoft Word 自带的"比较文档"功能,一条命令就能让 Word 自动打开两份文档的对比结果,改动之处以修订标记清晰呈现。更妙的是,你还可以把它接入 Git,让git diff直接读懂 Word 文件。下面这份实战指南,带你 3 步上手。
为什么你需要一个"文档版 diff"
Word 的"审阅 → 比较"功能本身很好用,但它藏在菜单深处:你得先打开文档 → 点"审阅" → 点"比较" → 弹窗里选文件 → 点确定,整整五步操作。如果一个月要比十几次文档,这套流程足以让人烦躁。
而 .docx 本质上是压缩包里的 XML,用文本 diff 工具看它无异于读天书。ExtDiff 的定位就是"文档界的 diff 工具":把 Word 原生的对比能力变成一条命令、一个按钮,甚至一种 Git 工作流,让"对比文档"这件事从手动劳动变成自动执行。
快速上手指南:3 步跑起来 🚀
先确认你的环境满足这三个条件,缺一不可:
- Windows 系统(脚本基于 PowerShell 和 COM 自动化)
- 已安装 Microsoft Word(WPS 不兼容,必须是 MS Office 的 Word)
- PowerShell 可用(Win10 / Win11 自带)
然后按下面的步骤操作:
第 1 步:获取项目代码
打开 PowerShell,执行克隆命令:
git clone https://gitcode.com/gh_mirrors/ex/ExtDiff第 2 步:运行对比命令
进入项目目录,把两个文档路径传给diff-word.cmd(第一个是旧版,第二个是新版):
cd ExtDiff diff-word.cmd old.docx new.docx第 3 步:查看对比结果
此时 Word 会自动启动,并打开一个名为 "Comparison" 的新文档——增删改的内容全部以修订标记显示,旧版窗口随后自动关闭,只保留对比结果。就这样,3 步完成一次文档对比。
如果你不想敲命令,双击start-gui.cmd还能打开一个图形窗口,效果见下图。
核心功能逐个击破
命令行对比:一条命令出结果
命令行入口是[Diff-Word.ps1](https://link.gitcode.com/i/046eebc229e573bee16117792a74cea5)(diff-word.cmd只是它的批处理代理)。核心逻辑其实只有几行,关键点在注释里:
$document = $word.Documents.Open($BaseFileName, $false, $false) # 打开旧版文档(不显示、不弹窗) $document.Compare($ChangedFileName, [ref]"Comparison", ...) # 调用 Word 内置的 Compare 功能 $document.Close([ref]$wdDoNotSaveChanges) # 关闭旧版窗口,只留下对比结果脚本还替你处理了两个隐藏坑:一是先解析文件路径,所以~这类 PowerShell 路径也能用;二是自动去掉旧版文件的只读属性,否则 Word 会拒绝比较只读文件。
图形界面:把文件拖进对比框 🖱️
双击start-gui.cmd即可打开图形界面,它调用的脚本是[Gui-Diff-Word.ps1](https://link.gitcode.com/i/9832fccc664cff0174178505df1c8925)。
上图是 1.3.0 新增的界面:注意窗口默认"置顶"显示,方便你从资源管理器拖文件进来。
界面设计很贴心:窗口始终浮在所有窗口之上(TopMost),你只需把旧版文档拖到第一个输入框、新版拖到第二个,然后点击Compare按钮,Word 就会照常弹出对比结果;点击Clear清空输入,窗口会恢复置顶状态。整个过程鼠标都不用离开,比命令行更直观。
接入 Git:让 git diff 看懂 docx
这是 ExtDiff 最亮眼的功能。普通 Git 无法对二进制 docx 做有意义的 diff,但配置后,git diff会直接调用 Word 帮你对比。
在仓库根目录新建或编辑.gitattributes,加入一行:
*.docx diff=word再编辑家目录下的.gitconfig,注册一个自定义 diff 工具:
[diff "word"] command = <pathToExtDiffFolder>/diff-word-wrapper.cmd把<pathToExtDiffFolder>替换成本地项目路径。这里的桥梁是[diff-word-wrapper.cmd](https://link.gitcode.com/i/34cc8c1915ca4c27bf4a1e02e46e7e2a),它把 Git 传入的两个文件参数(%2旧版本、%5新版本)转发给diff-word.cmd。如果你想全局生效,可以创建一个全局.gitattributes,再用git config --global core.attributesfile ~/.gitattributes指向它。
实战小案例:给文档仓库配上 Word 对比
把前面所有功能串起来,我们做一个小实验:让一个纯文档仓库具备"看得见"的版本对比。
第 1 步:初始化仓库并配置
git init doc-repo cd doc-repo git config --global core.attributesfile ~/.gitattributes # 指定全局属性文件在家目录的.gitattributes写入*.docx diff=word,在.gitconfig的[diff "word"]小节中填好 wrapper 的绝对路径。
第 2 步:生成两个版本的文档
用 Word 新建report.docx,写上一段话,保存后提交:
git add report.docx git commit -m "v1 初稿"接着修改文档(增删几行文字),保存但不要提交。
第 3 步:执行对比并观察结果
git diff report.docx预期效果:Word 被自动唤醒,打开一份带修订标记的对比文档——新增内容以下划线显示、删除内容以删除线显示,旁边还有批注栏标注修改来源。你甚至不需要git diff支持二进制格式,就能像看代码 diff 一样审查文档改动。配合git log回溯历史版本,整个文档仓库的演进史都一目了然。
常见问题与避坑
Q1:运行时报错"找不到类型 [Word.Application]",怎么办?说明系统里没有可用的 Microsoft Word COM 对象。检查是否安装了 MS Office 的 Word(WPS 不提供该 COM 接口),并确认它是 2007 以上版本。
Q2:提示文档被占用或"无法打开文件"?脚本已自动处理只读属性,但如果文档正被另一个 Word 窗口打开,还是会冲突。对比前先关掉相关的 Word 窗口即可。
Q3:配置好 Git 集成后git diff没反应?先确认.gitattributes生效(执行git check-attr diff -- report.docx应输出word),再确认.gitconfig里的路径写对了,最后注意git diff只对比"已跟踪但未提交"的改动,文件第一次加入暂存区(staged)时需要用git diff --cached才能看到。
Q4:PowerShell 提示"禁止运行脚本"?这是执行策略限制。用powershell -ExecutionPolicy Bypass -File Diff-Word.ps1 old.docx new.docx即可绕过,或通过diff-word.cmd间接调用。
Q5:GUI 窗口点了 Compare 后不再置顶了?这是设计行为:对比期间让出置顶,避免遮挡 Word 的对比结果。点一下Clear按钮,窗口就会恢复置顶。
总结与下一步
一句话概括:ExtDiff 用一条命令、一个界面和一套 Git 集成,把 Word 原生的文档对比能力带进了命令行工作流,从此 diff 不再只是代码的专利。现在就下载试试,用它对比你手头最早的一版文档和最晚的一版,感受一下"3 步出结果"的爽快;如果你在项目里发现了更好用的配置方案,欢迎提交反馈,让这个工具惠及更多人。
想深入了解实现细节,可以翻看项目的变更记录 CHANGELOG.md 了解版本演进,或阅读 License.md 确认使用许可。祝你从此告别逐页翻找的文档对比时光!
【免费下载链接】ExtDiffCompare documents using MS Word from the command line.项目地址: https://gitcode.com/gh_mirrors/ex/ExtDiff
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考