使用 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'
这仅在关系类型为外部(而不是与同一包中的另一部分的关系)时有效。
当然,这是内部黑客攻击,因此使用风险自负。也就是说,这部分代码库长期以来一直非常稳定。
我的 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'
这仅在关系类型为外部(而不是与同一包中的另一部分的关系)时有效。
当然,这是内部黑客攻击,因此使用风险自负。也就是说,这部分代码库长期以来一直非常稳定。