Slide.placeholders
возвращает объект _SlidePlaceholders
, который имеет необычную семантику, поскольку определение заполнителей может быть сложным. При использовании, как у вас выше, он имеет семантику dict
, ключ - значение атрибута idx
заполнителя. Этот атрибут idx
определяется с помощью slide-layout , из которого был создан слайд и который, таким образом, являлся источником его заполнителей. Эти idx
значения являются по существу произвольными и не гарантируют, что они являются смежными.
Вы можете узнать значения idx следующим образом:
for placeholder in slide.placeholders:
print(placeholder.placeholder_format.idx)
Теперь вопрос: «Какой из этих заполнителей мне нужен?»
Есть несколько стратегий:
Определить по значению idx
: Конкретный заполнитель на двух разных слайдах, сформированных из одного макета слайда, будет иметь одинаковое значение idx
. Если вы можете обнаружить это значение idx
, используйте slide.placeholders[idx]
. Обратите внимание, что это поиск dict
(ключ), а не list
(смещение) поиск.
Идентификация по типу заполнителя: Заполнители бывают разных типов. https://python -pptx.readthedocs.io / о / последний / API / перечисление / PpPlaceholderType.html # ppplaceholdertype . Если тот, который вам нужен, является единственным на слайде этого типа, это может работать
from pptx.enum.shapes import PP_PLACEHOLDER
def find_placeholder():
for placeholder in slide.placeholders:
if p.placeholder_format.type == PP_PLACEHOLDER.FOOTER:
return placeholder
print("not found")
- Найти по z-порядку: Обычно это не очень надежно, потому что фигуры можно легко перемещать вперед и назад по z-порядку, но для полноты, скажем, вы полагали, что ваша фигура была последней (самой верхней) заполнитель:
# ---note: this is list-semantics item access, not dict---
placeholder = list(slide.placeholders)[-1]