gpt4 book ai didi

python - 使用 Python 和 win32com 检查 Microsoft Word 中的超链接

转载 作者:太空宇宙 更新时间:2023-11-03 15:33:47 25 4
gpt4 key购买 nike

我正在开发一个程序,该程序将打开 Word 文档并检查该文档中的所有链接。如果任何链接损坏,它应该报告。

我可以使用 Python 的 win32com 库来完成这一切。

但是,目前我正在使用 HyperLink.follow()检查每个链接。问题是它实际上打开每个文档,并且我的屏幕很快就充满了打开的文档(我的测试文件大约有 15 个指向不同文档的链接,在生产中我预计它可能会达到数百个)。

我怎样才能阻止这种情况发生?我有一些想法,但不知道如何实现:

  • 最好根本不会打开这些文档:我只需要知道该链接是否有效,也许无需实际点击该链接即可完成此操作。我不知道有什么方法可以做到这一点。
  • 也许可以通过编程方式关闭文档。我还没有找到引用新打开的文档的方法。
  • 最后,也许文档可以隐形加载。这并不理想,但我注意到 client.Dispatch() 支持隐形打开应用程序,所以也许可以做到。

当前计划:

#settings
debug = True

# Open a specified word document
wordapp = win32com.client.Dispatch('Word.Application')
wordapp.Visible = debug

directory = os.path.dirname(__file__)
filename = '0 - Cover.docx'
document_location = os.path.join(directory, filename)

if debug == True:
print(document_location)

document = wordapp.Documents.Open(document_location)

if debug == True:
print("Document opened succesfully.")

# Gimme the links
wordapp.ActiveDocument

for link in (wordapp.ActiveDocument.HyperLinks):
print(link.Name)

try:
link.Follow()
except:
print("This link is broken.")
else:
print("This link did not raise an error.")

最佳答案

超链接有两个属性——地址,它(对于本地文件)包含文件系统上的某个位置; SubAddress(对于本地文件)指的是所引用项目内的位置 - Word 书签的名称或 Excel 命名的单元格范围等。

检查Address是否映射到文件系统上的文件可能就足够了,而无需打开文档。 OTOH 这不会告诉您该链接是否完全有效,因为 SubAddress 可能引用了一个不存在的名称。

如果您想检查超链接的完整功能,并且所有超链接都应引用 Word 文档,则可能会在当前应用程序的上下文中打开它们。如果是这种情况,那么您可以通过编程方式访问带有该名称的新打开的文档,然后将其关闭:

import os

opened_doc = wordapp.Documents(os.path.basename(link.Address))
opened_doc.Close()
<小时/>

注意事项:

  • 上述内容仅适用于加载到当前应用程序中的文档。这不包括其他文件类型(Excel 电子表格、Powerpoint 演示文稿)或在另一个应用程序实例中打开的 Word 文档。
  • client.Dispatch支持隐形加载文档不太准确;它是默认情况下不可见加载的 Word 对象模型。无论如何,这与 Hyperlink.Follow 无关,它(如果我理解正确的话)依赖于系统 API 使用适当的应用程序打开相关文档。

关于python - 使用 Python 和 win32com 检查 Microsoft Word 中的超链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42704043/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com