Как объяснено в документации ( конкретно в этом разделе ):
В настоящий момент добавление слайда является единственной операцией в коллекции слайдов. В отставании на момент написания статьи это удаление слайда и перемещение слайда в другую позицию в списке. Копирование слайда из одной презентации в другую оказывается довольно сложным в общем случае, так что, вероятно, этого не произойдет, пока не будет сожжено больше отставания.
Или, другими словами, в настоящее время невозможно можно перемещать слайды, как вы предлагали. Лучшая работа, которую я использовал, - это создание новой презентации и изменение порядка слайдов в ней (поскольку вы можете добавлять слайды).
Например, скажем, у меня есть слайды в Presentation1.pptx:
[0]
[1]
[2]
[3]
[4]
Но я хочу:
[2]
[3]
[4]
[0]
[1]
Ваш код (в не проверенном псевдокоде) будет:
old_presentation = Presentation("Presentation1.pptx")
new_presentation = Presentation()
for slide in old_presentation.slides[2:]:
new_slide = new_presentation.slides.add_slide() # transfer the contents into new presentation for slides [2] [3] [4]
populate_new_slide_from_old_slide(slide, new_slide)
for slide in old_presentation.slides[:2]:
new_slide = new_presentation.slides.add_slide() # transfer the contents into new presentation for slides [0] [1]
populate_new_slide_from_old_slide(slide, new_slide)
new_presentation.save()
Где populate_new_slide_from_old_slide()
будет выглядеть (почти уверен, что это будет работать как есть, но опять же я не проверял это):
def populate_new_slide_from_old_slide(slide, new_slide):
shapes_to_transfer = slide.shapes
for shape in shapes_to_transfer:
new_shape = new_slide.shapes.add_shape(shape)
Я считаю, что заполнители тоже являются фигурами, поэтому их нужно переносить этим методом!
Обратите внимание, я некоторое время не кодировал .pptx
, поэтому фактическая реализация может быть немного другой. Как концепция, в настоящее время это единственный способ сделать то, что вы просите. По моему мнению, если вы активно генерируете данные (а не просто реорганизуете их после факта), вероятно, было бы проще просто создать объект new_presentation
и подключить к нему ваши данные. Мне кажется странным продолжать генерировать вывод в старом формате и затем преобразовывать его в новый формат. Например, когда вышли DVD, люди начали ставить свои фильмы на это (разумный вариант) вместо того, чтобы делать VHS, а затем переносить VHS на DVD каким-то произвольным способом (очень специфический вариант, от которого я пытаюсь вас отговорить).