Aspose word for python 如何获取本地word中的批注和修订

尝试使用aspose-word for python 获取本地一个word中是否能存在批注和修订,但是确报错;有什么好办法么

@hailingbi

概要
Aspose.Words for Python via .NET 能读取本地 Word 文档(.doc/.docx)中的批注(Comments)和修订(Track Changes)。文档对象模型提供了相应的 API,常用的做法是通过 Document.get_child_nodes(NodeType.COMMENT, True) 获取批注节点,使用 Document.revisions 集合遍历修订记录。

原因

  • 批注 在 DOM 中表现为 Comment 节点,可通过 NodeType.COMMENT 检索。
  • 修订Revision 对象集合的形式存在,Document.revisions 包含所有插入、删除、格式更改等记录。
  • 加载错误通常由以下几种情况导致:
  1. Aspose.Words 版本过旧或未正确安装,导致缺少相应属性或方法;
  2. 使用了不兼容的 LoadOptions(例如仅用于纯文本的选项),与 Word 文档格式不匹配;
  3. 文档受密码保护但未在加载时提供密码。

后续操作

  1. 确保使用最新的 Aspose.Words 版本
pip install aspose-words --upgrade

最新版本的文档中明确说明了 Document.revisionsNodeType.COMMENT 的使用方式(参见官方文档 “Track Changes in a Document”)。

  1. 示例代码(读取批注和修订)
import aspose.words as aw

# 加载文档(如有密码请在 LoadOptions 中设置)
load_options = aw.loading.LoadOptions()
# load_options.password = "your_password" # 如需密码
doc = aw.Document(r"C:\Path\To\YourDocument.docx", load_options)

# 读取批注
print("=== 文档批注 ===")
comment_nodes = doc.get_child_nodes(aw.NodeType.COMMENT, True)
for comment in comment_nodes:
print(f"作者: {comment.author}")
print(f"内容: {comment.get_text().strip()}")
print("-" * 30)

# 读取修订(Track Changes)
print("\n=== 文档修订 ===")
for rev in doc.revisions:
rev_type = rev.revision_type # INSERT、DELETE、FORMAT_CHANGE 等
author = rev.author
# 获取被修改节点的文本(即使节点已被删除,ParentNode 仍可获取原始文本)
changed_text = rev.parent_node.get_text().strip()
print(f"类型: {rev_type}, 作者: {author}, 内容: {changed_text}")
  1. 仅判断是否存在批注或修订(不遍历全部)
has_comments = doc.get_child_nodes(aw.NodeType.COMMENT, True).get_count() > 0
has_revisions = doc.revisions.get_count() > 0
print(f"是否有批注: {has_comments}, 是否有修订: {has_revisions}")
  1. 常见错误排查
  • AttributeError: 'Document' object has no attribute 'revisions' → 说明使用的 Aspose.Words 版本过旧,请升级。
  • FileNotFoundError / InvalidFormatException → 检查文件路径、文件是否为受支持的 Word 格式以及是否被其他程序占用。
  • PasswordProtectedException → 文档受密码保护,需要在 LoadOptions 中提供正确的密码。
  1. 如果仍然报错,请收集完整的异常堆栈信息(异常类型、行号、错误消息),并参考官方文档的 “Track Changes in a Document” 章节进行进一步排查。

备注:上述代码和属性基于 Aspose.Words for Python via .NET 官方文档中对批注和修订的描述(见 “Track Changes in a Document”),如果使用的版本与文档不匹配,可能需要先升级或参考对应版本的 API 手册。

@hailingbi 若问题仍未解决,请提供您使用的文件和代码。

has_comments = doc.get_child_nodes(aw.NodeType.COMMENT, True).get_count() > 0
has_revisions = doc.revisions.get_count() > 0
print(f"是否有批注: {has_comments}, 是否有修订: {has_revisions}")
我直接运行这段代码,报错AttributeError: ‘aspose.words.NodeCollection’ object has no attribute ‘get_count’

@hailingbi 你需要使用count。以下是相关文档链接:

1 Like