在同一 PowerPoint 文档中创建指向其他幻灯片的超链接

Creating a hyperlink to other slides in the same PowerPoint document

我正在寻找一种方法来添加到同一 PPTX 文档中其他幻灯片的超链接,使用 python-pptx 自动进行。下面是我的测试,没有用。在线搜索暗示了一些使用 ActionSetting、part、target_slide、rels、rPr.add_ihlinkClick 等的解决方案,但我无法完全理解将它们组合在一起。

基本上,期望的结果是创建一个文本,该文本将通过幻灯片编号或幻灯片 ID(如果存在)跳转到任何其他幻灯片

    p = table.rows[1].cells[1].text_frame.paragraphs[0]
    r = p.add_run()
    r.text = "Testing"
    r.hyperlink.address = "/ppt/slides/rels/slide1.xml"

python-pptx 中的 ActionSetting 位目前似乎是只读的。所以没有直接 API 支持您正在寻找的内容。如果你想写这些,你需要写一个 extension/workaround 函数。

此处对动作设置功能进行了相当扎实的分析 space: http://python-pptx.readthedocs.io/en/latest/dev/analysis/shp-hyperlink.html

如果我没记错的话,唯一真正的诀窍是获取目标幻灯片的内部目标 "URL"。我会使用 PowerPoint UI 手工制作一个内部 link 并检查它用 opc-diag 生成的 XML。找到可行的方法可能非常简单,即使它不能解决一般情况。

您还可以 "cheat" 使用 shape.click_action(作为形状,您可以简单地使用包含文本框的形状):

    def create_hyperlink(run, shape, to_slide):
        shape.click_action.target_slide = to_slide
        run.hyperlink.address = shape.click_action.hyperlink.address
        run.hyperlink._hlinkClick.action = shape.click_action.hyperlink._hlink.action
        run.hyperlink._hlinkClick.rId = shape.click_action.hyperlink._hlink.rId
        shape.click_action.target_slide = None

这就是它在 python-pptx-interface 中的完成方式(因为否则我无法获得正确的 rId ^^)。看看 PPTXCreator.add_content_slide.