使用 Python 编辑底层 PowerPoint XML (python-pptx)

dan*_*n_g 4 python powerpoint python-pptx

我有 PowerPoint 文件,其中包含指向 Excel 文档中不同工作表的数十个链接。我需要以编程方式更改这些链接指向的 Excel 文档。

我很确定我可以使用 VBA 来完成此操作,但由于我无论如何都在 python 中生成 Excel 文档,所以我也更愿意更新那里的链接。

我深入研究了测试.pptx文件的底层 XML 文件,发现链接引用位于该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)
Run Code Online (Sandbox Code Playgroud)

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

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

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

sca*_*nny 5

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

rel._target = 'FULL_PATH_OMITTED\test.xlsx!Sheet1!R3C5:R20C14'
Run Code Online (Sandbox Code Playgroud)

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

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