我正在开发一个程序,它将打开Word文档并检查该文档中的所有链接。它应该报告是否有任何链接被破坏。
我可以使用win32com库来完成所有这些工作。
但是,目前我正在使用HyperLink.follow()来检查每个链接。问题是它实际打开每个文档,我的屏幕很快就会被打开的文档填满(我的测试文件有大约15个指向不同文档的链接,在生产中我希望它可以达到数百个)。
如何阻止这种情况发生?我有一些想法,但不知道如何去做任何一个:
当前节目:
#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.")
答案 0 :(得分:1)
超链接有两个属性 - 地址,(对于本地文件)包含文件系统上的某些位置;和 SubAddress (对于本地文件)是指引用项目中的位置 - Word书签的名称,或Excel命名的单元格范围等。
检查Address
是否映射到文件系统上的文件可能就足够了,而根本不打开文档。 OTOH这不会告诉你链接是否完全正常,因为 SubAddress 可能引用一个不存在的名称。
如果要检查超链接的完整功能,并且所有这些超链接都需要引用Word文档,则可能会在当前应用程序的上下文中打开它们。如果是这种情况,那么您可以使用名称以编程方式访问新打开的文档,并将其关闭:
import os
opened_doc = wordapp.Documents(os.path.basename(link.Address))
opened_doc.Close()
注意事项:
client.Dispatch
支持无形加载文件并不十分准确;它是Word对象模型,默认情况下加载不可见。在任何情况下,这与Hyperlink.Follow
无关,npm install -g concurrently
npm install -g lite-server
npm install -g typescript
npm uninstall lite-server
(如果我理解正确的话)依赖于系统API来打开相应应用程序的相关文档。