使用 Python (python-pptx) 编辑基础 PowerPoint XML

Editing underlying PowerPoint XML with Python (python-pptx)

我的 PowerPoint 文件包含许多 link 到 Excel 文档中的不同工作表。我需要以编程方式更改这些 link 指向的 Excel 文档。

我很确定我可以用 VBA 做到这一点,但由于我在 python 中生成 Excel 文档,无论如何我更愿意更新 link 也在那里。

我深入研究了底层 XML 文件以测试 .pptx 文件,发现 link 引用位于 ppt/slides/_rels/ 文件夹中(解压缩 .pptx 文件)

例如,slide1.xml.rels 包含多个关系,一个具有 TargetMode="External"Target="FULL_PATH_OMITTED\test.xlsx!Sheet1!R3C5:R20C14"

使用 python-ppt 包我发现这个相同的引用位于 slide.part.rels

例如:

for rel in slides[0].part.rels.values():
    if rel.is_external:
        print(rel.target_ref)

找到 link 的相同路径(即 "FULL_PATH_OMITTED\test.xlsx!Sheet1!R3C5:R20C14"

我不知道如何更改此值(如果可以更改的话)。只是尝试使用 python-pptx 设置它会产生 AttributeError

有没有办法使用 python-pptx 修改 PowerPoint 文件的底层 XML?或者一些替代策略会很好。

尝试设置 rel(关系)对象的 ._target 属性
https://github.com/scanny/python-pptx/blob/master/pptx/opc/package.py#L555

rel._target = 'FULL_PATH_OMITTED\test.xlsx!Sheet1!R3C5:R20C14'

这仅在关系类型为外部(而不是与同一包中的另一部分的关系)时有效。

当然,这是内部黑客攻击,因此使用风险自负。也就是说,这部分代码库长期以来一直非常稳定。