“文档快比”是一个面向 Windows 11 的轻量桌面工具。把旧版本和新版本 Word 文档拖入窗口后,它会调用本机 WPS 文字或 Microsoft Word 的原生文档比较功能,生成一份带修订痕迹的新 .docx 文件。
程序不会修改原始文档,不实现自己的文本 diff,也不直接修改 Word XML。所有处理都在本机完成,不上传文件、不联网、不收集数据,也不读取或记录文档正文。
主界面支持分别拖入新旧文档,也可以一次同时拖入两个 .doc 或 .docx 文件。
- Windows 11 x64
- 自包含版:无需预装 .NET
- 框架依赖版:需要 .NET 8 Desktop Runtime(x64)
- 本机至少安装 WPS 文字或 Microsoft Word 之一,并且该版本暴露可用的 COM/OLE Automation 接口
第一版支持 .docx 和 .doc;暂不支持 .docm、.dot、.dotx、.dotm、PDF、TXT、加密或需要密码的文档。
- 启动
WordQuickCompare.exe。 - 将原始文档拖入左侧“旧版本”,将修改后文档拖入右侧“新版本”;也可以点击“选择文件”。还可以一次同时选中两个文件并拖到窗口任意位置,程序会将修改时间较早的文件放在左侧、较新的文件放在右侧。
- 确认顺序。左侧始终作为
OriginalDocument,右侧始终作为RevisedDocument。修改时间只用于同时拖入两个文件时的默认排列;如时间不代表版本先后或排列放反,可点击“交换旧版和新版”。 - 选择“自动选择”、WPS 文字或 Microsoft Word。中文合同、报告和法律文档建议保留默认的“按字符比较”。
- 点击“开始对比”。成功后结果默认保存在新版本所在目录,并由执行比较的 Office 程序打开。
也可以把一至两个 .doc/.docx 文件直接拖到 EXE 图标:一个文件填入旧版本,两个文件按命令行参数顺序分别填入旧版和新版。程序不会自动开始比较,需由用户确认顺序。
重要:程序比较的是已经保存到磁盘的文件。WPS 或 Word 中尚未保存的修改无法参与比较。
自动选择的顺序为:
- 优先尝试上一次成功使用的引擎;
- 没有历史记录时优先 WPS;
- WPS 未安装、COM 创建失败或明确未提供可调用的比较接口时,尝试 Microsoft Word;
- 两者都不可用时给出明确提示。
手动指定 WPS 或 Word 时不会静默切换到另一引擎。Word 使用 Word.Application;WPS 依次探测 KWPS.Application、WPS.Application、wps.Application 和 Kingsoft.Writer.Application,候选项集中在 WpsCompareEngine.ProgIdCandidates 中,便于后续扩展。
程序始终创建独立 Office Automation 实例,不使用 GetActiveObject,不接管已有窗口,不强制结束 WINWORD.EXE 或 WPS 进程。两个源文档以只读方式打开,原生 CompareDocuments 的目标设为新文档,保存成功后才报告完成。
默认输出到新版本所在目录:
{新版本文件名}_对比结果_{yyyyMMdd_HHmmss}.docx
如果重名会自动增加 _2、_3 等序号。如果新版本目录不可写,会改存到:
用户文档\文档快比\
程序不会覆盖源文件或已有结果。
- 不上传文档,不联网,不收集遥测;
- 不读取、缓存或记录文档正文;
- 设置:
%AppData%\WordQuickCompare\settings.json; - 日志:
%LocalAppData%\WordQuickCompare\Logs\; - 日志仅记录启动、引擎检测、任务状态、异常类型和 COM HRESULT,不记录正文;日志写入失败不会阻断比较。
WordQuickCompare.sln
src/
WordQuickCompare.App/ WPF、MVVM、拖拽和界面协调
WordQuickCompare.Core/ 校验、输出、设置、日志、STA、Word/WPS引擎
tests/
WordQuickCompare.Tests/ 零第三方依赖的离线核心逻辑测试
docs/
manual-test-checklist.md 真实WPS/Word手工测试矩阵
build-release.ps1
安装 .NET 8 SDK 或更高版本 SDK(本项目目标框架固定为 .NET 8),在项目根目录执行:
dotnet build WordQuickCompare.sln
dotnet test WordQuickCompare.sln测试工程采用项目内置的轻量测试入口,避免在离线环境下载第三方测试框架;dotnet test 会真实运行 10 项核心断言,包括校验、输出命名、双文件排序、备用目录、引擎选择、命令行参数和设置读写。
powershell -ExecutionPolicy Bypass -File .\build-release.ps1脚本会依次执行 Release 构建、测试,以及原生 win-x64 和 Office 兼容 win-x86 两组发布,且不开启裁剪:
dist/
self-contained/
WordQuickCompare.exe 无需预装.NET,单文件
framework-dependent/
WordQuickCompare.exe 原生win-x64;需要.NET 8 x64 Desktop Runtime
office-compatible-self-contained/
WordQuickCompare.exe Office兼容版;无需预装.NET,单文件(推荐)
office-compatible-framework-dependent/
WordQuickCompare.exe Office兼容版;需要.NET 8 x86 Desktop Runtime
Office COM 是进程外自动化接口,32 位客户端可以正常调用本机 64 位 Word/WPS。部分 Windows/Office 安装环境的 64 位 Word.Application 注册链路会在启动阶段等待约 120 秒后返回 0x80080005,而 32 位客户端可正常工作;因此遇到 Word 一直显示“正在调用”或上述错误时,请使用 office-compatible-self-contained。该兼容版仍用于 Windows 11 x64,不会降低文档格式或比较功能。
- 不同 WPS 版本的 ProgID、
Documents.Open、CompareDocuments和SaveAs/SaveAs2签名可能存在差异。适配器会从完整参数签名逐级降级;降级后,个别高级选项可能由 WPS 使用其默认值。 - 如果当前 WPS 版本完全没有暴露程序化文档比较接口,程序会提示“当前安装的WPS版本未提供可调用的文档比较接口”。此时可改用 Microsoft Word 引擎。
- 第一版不提供模拟鼠标、快捷键或点击菜单的兼容方式,也不修改注册表添加资源管理器右键菜单。
- Office COM Automation 依赖本机桌面会话,不适合无交互 Windows 服务或服务器端批处理。
- 少数 Office 安装环境只允许 32 位 COM 客户端稳定启动 Word。此时使用 Office 兼容版;程序不会为此修改注册表,也不会接管已有 Word 窗口。
- 已损坏、加密、受保护、被独占占用或 Office 无法识别的文档不能比较。
请先在原编辑窗口保存文档。未保存到磁盘的修改不在本程序的输入文件中。
不会。两个源文件只读打开,比较结果保存为新的 .docx,输出路径也会再次校验,禁止覆盖任一源文件。
自动模式优先上一次成功引擎;没有历史记录时优先 WPS。也可在下拉框中手动指定。
不同 WPS 版本的 COM 接口确实可能不同。可先更新 WPS;若仍无可调用接口,请选择 Microsoft Word。第一版不会用模拟点击菜单作为后备方案。
先等待错误提示并查看日志。如果日志出现 0x80080005、0x80070520,或停在“准备创建COM实例”,请改用 dist\office-compatible-self-contained\WordQuickCompare.exe。这是 32 位 COM 客户端兼容版,但可以正常运行在 Windows 11 x64 并调用本机 64 位 Word;无需安装额外运行时。
失败时程序会关闭源文档并尝试退出本次创建的独立 Office 实例;不会杀进程。成功且选择自动打开时,结果窗口会留给用户继续查看和编辑,关闭“文档快比”不会关闭它。
完整清单见 docs/manual-test-checklist.md,覆盖仅 WPS、仅 Word、两者并存、.doc/.docx、中文长路径、空格和括号、占用、不可写目录、损坏或加密、Office 忙、交换顺序、拖到 EXE 图标、高 DPI 及发布包验证。
