【发布时间】:2021-02-05 11:43:54
【问题描述】:
我使用 python-docx 编写了一个脚本来搜索 word 文档(通过搜索运行)以获取参考编号和技术关键词,然后创建一个表格来汇总附加到 word 文档末尾的搜索结果。
有些文档有 100 多页,所以我想通过在搜索结果表中创建内部超链接来让用户更轻松,这样它就会将您带到文档中检测到搜索结果的位置。
一旦找到参考运行,我不知道如何将其标记为书签或如何在结果表中创建指向该书签的超链接。
我能够使用此页面中的代码为外部 URL 创建书签 Adding an hyperlink in MSWord by using python-docx
我也尝试过创建书签,我发现了这个页面: https://github.com/python-openxml/python-docx/issues/109
标题与创建书签有关,但代码似乎生成了 word 中的数字。
我觉得这两个解决方案可以放在一起,但是我对 xml/word docs 的理解还不够,无法做到。
更新: 我找到了一些代码,可以将书签添加到 word 文档中,现在需要的是一种使用 word 文档中的链接链接到此的方法 https://github.com/python-openxml/python-docx/issues/403
*from docx import Document
def add_bookmark(paragraph, bookmark_text, bookmark_name):
run = paragraph.add_run()
tag = run._r # for reference the following also works: tag = document.element.xpath('//w:r')[-1]
start = docx.oxml.shared.OxmlElement('w:bookmarkStart')
start.set(docx.oxml.ns.qn('w:id'), '0')
start.set(docx.oxml.ns.qn('w:name'), bookmark_name)
tag.append(start)
text = docx.oxml.OxmlElement('w:r')
text.text = bookmark_text
tag.append(text)
end = docx.oxml.shared.OxmlElement('w:bookmarkEnd')
end.set(docx.oxml.ns.qn('w:id'), '0')
end.set(docx.oxml.ns.qn('w:name'), bookmark_name)
tag.append(end)
doc = Document("test_input_1.docx")
# add a bookmakr to every paragraph
for paranum, paragraph in enumerate(doc.paragraphs):
add_bookmark(paragraph=paragraph, bookmark_text=f"temp{paranum}", bookmark_name=f"temp{paranum+1}")
doc.save("output.docx")*
【问题讨论】:
-
我发现这个未回答的问题与我的stackoverflow.com/questions/56360992/…基本相同
标签: python python-3.x python-docx