Python+Spire.Doc实现Word文档自动化差异对
在日常办公中,经常需要对比两个Word文档的差异,例如合同审批、技术文档版本核对、公文修订等。虽然Word内置了“比较”功能,但手动操作效率低且难以批量处理。通过Python脚本调用Free Spire.Doc for Python库,可以轻松实现自动化文档差异对比,并将结果以修订标记形式输出。Free Spire.Doc for Python是一个免费库(有页数限制),无需安装Microsoft Office,可直接在Python环境中独立运行。核心API是Document类的Compare()方法,它将当前文档与另一个文档进行比对,所有差异会以Word修订模式(Track Changes)记录在原文档对象中,保存后即可在Word中查看。
## 一、环境安装
使用pip安装即可:
pip install Spire.Doc.Free
## 二、基础文档对比
以下代码演示最基础的对比流程:加载两个文档,执行比对,输出带修订标记的结果文件。
from spire.doc import *
from spire.doc.common import *
# 加载原始文档(基准版本)
firstDoc = Document("Original.docx")
# 加载修订文档(对比版本)
secondDoc = Document("Revised.docx")
# 执行对比:以firstDoc为基准,识别secondDoc相对于它的所有改动
# 第二个参数为修订人名称,会显示在修订标记中
firstDoc.Compare(secondDoc, "系统审计员")
# 保存对比结果
firstDoc.SaveToFile("对比结果.docx", FileFormat.Docx2016)
# 释放资源
firstDoc.Dispose()
secondDoc.Dispose()
运行后生成的“对比结果.docx”包含完整的修订标记:新增内容以下划线或不同颜色标记,删除内容以删除线标记,每处修订都显示修订人信息。整个过程仅需几行代码,非常适合集成到自动化工作流中。
## 三、自定义比较选项
实际业务中,我们可能只关心文本内容的变化,而忽略字体、颜色、段落格式等格式差异。这时可以使用CompareOptions类来控制比较行为。
### 3.1 忽略格式差异
from spire.doc import *
from spire.doc.common import *
firstDoc = Document("Original.docx")
secondDoc = Document("Revised.docx")
compareOptions = CompareOptions()
compareOptions.IgnoreFormatting = True
firstDoc.Compare(secondDoc, "系统审计员", compareOptions)
firstDoc.SaveToFile("对比结果_仅内容差异.docx", FileFormat.Docx2016)
firstDoc.Dispose()
secondDoc.Dispose()
设置IgnoreFormatting = True后,对比结果将只反映文本内容的增删改,格式变化不会被标记为修订。
### 3.2 其它比较选项
根据库版本不同,CompareOptions还支持更多属性:
- IgnoreHeadersAndFooters:忽略页眉/页脚内容的差异
- TextCompareLevel:控制文本对比粒度,默认值为Word(单词级对比)
这些选项可以根据具体需求组合使用,实现更精细的对比控制。
## 四、处理包含修订的文档
若待对比的文档本身包含未接受的修订记录,直接调用Compare()会抛出异常。解决方案是在对比前先接受所有修订,清理痕迹。
from spire.doc import *
from spire.doc.common import *
firstDoc = Document("Original_with_revisions.docx")
firstDoc.AcceptChanges()# 接受所有修订
secondDoc = Document("Revised.docx")
firstDoc.Compare(secondDoc, "系统审计员")
firstDoc.SaveToFile("对比结果.docx", FileFormat.Docx2016)
firstDoc.Dispose()
secondDoc.Dispose()
也可以先将清理后的文档保存为新文件,再重新加载进行对比,避免污染原始数据。
## 五、总结
使用Python配合Free Spire.Doc实现Word文档对比,具有以下优势:
- 自动化:可批量处理大量文档对比任务
- 独立性:不依赖Microsoft Office环境
- 可定制:支持忽略格式、页眉页脚等差异
- 输出标准:对比结果直接输出为带修订标记的标准Word文档
无论是文档审核、版本管理还是自动化办公流程,这套方案都能将重复性的手动核对工作转化为可靠的自动化脚本,显著提升效率。
Re: Python+Spire.Doc实现Word文档自动化差异对
这个方案很实用!我之前都是用 Word 自带的比较功能手动操作,遇到批量文档就头大。你提到的 `CompareOptions.IgnoreFormatting` 对纯文本比对特别有用,我们审校合同经常被格式修订干扰。另外想问一下,如果两个文档有几十页,这个库的性能表现如何?内存占用会很大吗?Re: Python+Spire.Doc实现Word文档自动化差异对
感谢分享!这套方案很实用,尤其是不依赖 Office 这一点能省下不少环境配置的麻烦。之前我用 VBA 或者 Win32 COM 做过类似功能,但在 Linux 服务器上就跑不了,换成纯 Python 库就方便多了。 想问一下楼主,对于页数限制(比如 10 页或 20 页)的实际体验如何?日常对比的文档如果页数较多,会不会被截断?有没有什么规避建议?Re: Python+Spire.Doc实现Word文档自动化差异对
感谢分享这么实用的教程!Free Spire.Doc的Compare方法确实很方便,几行代码就能批量处理文档对比,比手动操作高效多了。我之前用过Word内置的修订对比,遇到几十个文件就得重复点鼠标,换成脚本后省了不少时间。 关于忽略格式差异的选项,请问如果只想对比特定段落或表格内容的差异,有没有更细粒度的控制方式?另外,处理包含修订的文档时,先接受所有修订再对比,会不会丢失原作者信息?期待楼主后续能分享一些批量处理多个文件对比的经验。
页:
[1]