查看: 132|回复: 3

Python+Spire.Doc实现Word文档自动化差异对

[复制链接]
发表于 2 小时前 | 显示全部楼层 |阅读模式
在日常办公中,经常需要对比两个Word文档的差异,例如合同审批、技术文档版本核对、公文修订等。虽然Word内置了“比较”功能,但手动操作效率低且难以批量处理。通过Python脚本调用Free Spire.Doc for Python库,可以轻松实现自动化文档差异对比,并将结果以修订标记形式输出。

Free Spire.Doc for Python是一个免费库(有页数限制),无需安装Microsoft Office,可直接在Python环境中独立运行。核心API是Document类的Compare()方法,它将当前文档与另一个文档进行比对,所有差异会以Word修订模式(Track Changes)记录在原文档对象中,保存后即可在Word中查看。

## 一、环境安装

使用pip安装即可:
  1. pip install Spire.Doc.Free
复制代码

## 二、基础文档对比

以下代码演示最基础的对比流程:加载两个文档,执行比对,输出带修订标记的结果文件。
  1. from spire.doc import *
  2. from spire.doc.common import *
  3. # 加载原始文档(基准版本)
  4. firstDoc = Document("Original.docx")
  5. # 加载修订文档(对比版本)
  6. secondDoc = Document("Revised.docx")
  7. # 执行对比:以firstDoc为基准,识别secondDoc相对于它的所有改动
  8. # 第二个参数为修订人名称,会显示在修订标记中
  9. firstDoc.Compare(secondDoc, "系统审计员")
  10. # 保存对比结果
  11. firstDoc.SaveToFile("对比结果.docx", FileFormat.Docx2016)
  12. # 释放资源
  13. firstDoc.Dispose()
  14. secondDoc.Dispose()
复制代码

运行后生成的“对比结果.docx”包含完整的修订标记:新增内容以下划线或不同颜色标记,删除内容以删除线标记,每处修订都显示修订人信息。整个过程仅需几行代码,非常适合集成到自动化工作流中。

## 三、自定义比较选项

实际业务中,我们可能只关心文本内容的变化,而忽略字体、颜色、段落格式等格式差异。这时可以使用CompareOptions类来控制比较行为。

### 3.1 忽略格式差异
  1. from spire.doc import *
  2. from spire.doc.common import *
  3. firstDoc = Document("Original.docx")
  4. secondDoc = Document("Revised.docx")
  5. compareOptions = CompareOptions()
  6. compareOptions.IgnoreFormatting = True
  7. firstDoc.Compare(secondDoc, "系统审计员", compareOptions)
  8. firstDoc.SaveToFile("对比结果_仅内容差异.docx", FileFormat.Docx2016)
  9. firstDoc.Dispose()
  10. secondDoc.Dispose()
复制代码
设置IgnoreFormatting = True后,对比结果将只反映文本内容的增删改,格式变化不会被标记为修订。

### 3.2 其它比较选项
根据库版本不同,CompareOptions还支持更多属性:
- IgnoreHeadersAndFooters:忽略页眉/页脚内容的差异
- TextCompareLevel:控制文本对比粒度,默认值为Word(单词级对比)

这些选项可以根据具体需求组合使用,实现更精细的对比控制。

## 四、处理包含修订的文档

若待对比的文档本身包含未接受的修订记录,直接调用Compare()会抛出异常。解决方案是在对比前先接受所有修订,清理痕迹。
  1. from spire.doc import *
  2. from spire.doc.common import *
  3. firstDoc = Document("Original_with_revisions.docx")
  4. firstDoc.AcceptChanges()  # 接受所有修订
  5. secondDoc = Document("Revised.docx")
  6. firstDoc.Compare(secondDoc, "系统审计员")
  7. firstDoc.SaveToFile("对比结果.docx", FileFormat.Docx2016)
  8. firstDoc.Dispose()
  9. secondDoc.Dispose()
复制代码
也可以先将清理后的文档保存为新文件,再重新加载进行对比,避免污染原始数据。

## 五、总结

使用Python配合Free Spire.Doc实现Word文档对比,具有以下优势:
- 自动化:可批量处理大量文档对比任务
- 独立性:不依赖Microsoft Office环境
- 可定制:支持忽略格式、页眉页脚等差异
- 输出标准:对比结果直接输出为带修订标记的标准Word文档

无论是文档审核、版本管理还是自动化办公流程,这套方案都能将重复性的手动核对工作转化为可靠的自动化脚本,显著提升效率。
回复

使用道具 举报

发表于 2 小时前 | 显示全部楼层

Re: Python+Spire.Doc实现Word文档自动化差异对

这个方案很实用!我之前都是用 Word 自带的比较功能手动操作,遇到批量文档就头大。你提到的 `CompareOptions.IgnoreFormatting` 对纯文本比对特别有用,我们审校合同经常被格式修订干扰。另外想问一下,如果两个文档有几十页,这个库的性能表现如何?内存占用会很大吗?
回复 支持 反对

使用道具 举报

发表于 2 小时前 | 显示全部楼层

Re: Python+Spire.Doc实现Word文档自动化差异对

感谢分享!这套方案很实用,尤其是不依赖 Office 这一点能省下不少环境配置的麻烦。之前我用 VBA 或者 Win32 COM 做过类似功能,但在 Linux 服务器上就跑不了,换成纯 Python 库就方便多了。 想问一下楼主,对于页数限制(比如 10 页或 20 页)的实际体验如何?日常对比的文档如果页数较多,会不会被截断?有没有什么规避建议?
回复 支持 反对

使用道具 举报

发表于 2 小时前 | 显示全部楼层

Re: Python+Spire.Doc实现Word文档自动化差异对

感谢分享这么实用的教程!Free Spire.Doc的Compare方法确实很方便,几行代码就能批量处理文档对比,比手动操作高效多了。我之前用过Word内置的修订对比,遇到几十个文件就得重复点鼠标,换成脚本后省了不少时间。 关于忽略格式差异的选项,请问如果只想对比特定段落或表格内容的差异,有没有更细粒度的控制方式?另外,处理包含修订的文档时,先接受所有修订再对比,会不会丢失原作者信息?期待楼主后续能分享一些批量处理多个文件对比的经验。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

指导单位

江苏省公安厅

江苏省通信管理局

浙江省台州刑侦支队

DEFCON GROUP 86025

Hacking Group 021A

旗下站点

态势感知中心

应急响应中心

红盟安全

联系我们

官方QQ群:112851260

官方邮箱:security#ihonker.org(#改成@)

官方核心成员

关注微信公众号

Archiver|手机版|小黑屋| ( 沪ICP备2021026908号 )

GMT+8, 2026-7-15 11:28 , Processed in 0.029239 second(s), 18 queries , Gzip On, Redis On.

Powered by ihonker.com

Copyright © 2015-现在.

  • 返回顶部