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?或者一些替代策略也可以。
尝试设置(关系)对象._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)
仅当关系类型为外部(而不是与同一包中的另一个部分的关系)时,这才有效。
当然,这是黑客内部的,所以使用风险自负。也就是说,这部分代码库长期以来一直非常稳定。