Редактирование базового XML PowerPoint с помощью Python (python-pptx)
У меня есть файлы PowerPoint со многими десятками ссылок на различные листы в документе Excel. Мне нужно изменить документы Excel, на которые указывают эти ссылки программным способом.
Я уверен, что мог бы сделать это с помощью VBA, но поскольку я все равно создаю документы Excel на python, я бы предпочел обновить ссылки и там.
Я порылся в нижележащих XML-файлах для тестового файла .pptx
и обнаружил, что ссылки на ссылки живут в папке ppt/slides/_rels/
(после распаковка файла .pptx
)
Например, slide1.xml.rels
содержит несколько отношений, одно из которых имеет TargetMode="External"
и Target="FULL_PATH_OMITTEDtest.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)
Находит тот же путь для ссылки (т. е. "FULL_PATH_OMITTEDtest.xlsx!Sheet1!R3C5:R20C14"
)
python-pptx
производит AttributeError
Есть ли способ изменить базовый XML для a Файл PowerPoint с использованием python-pptx
? Или подойдет какая-нибудь альтернативная стратегия.
1 ответ:
Попробуйте установить атрибут
._target
объектаrel
(Relationship).
https://github.com/scanny/python-pptx/blob/master/pptx/opc/package.py#L555Это будет работать только тогда, когда тип отношения является внешним (В отличие от отношения к другой части в том же пакете). Это взлом внутренних органов, конечно, так что используйте на свой страх и риск. Тем не менее, эта часть кодовой базы была очень стабильной в течение длительного времени.rel._target = 'FULL_PATH_OMITTED\test.xlsx!Sheet1!R3C5:R20C14'