Как скопировать слайд?
Я создал слайд шаблона, и мне нужно его скопировать и отредактировать формы каждой копии отдельно.
Или как я могу добавить свой слайд шаблона в presentation.slide_layouts?
Это то, что я нашел на GitHub, и это работает для меня. Я изменил пару вещей для своего проекта. Вам нужно будет импортировать шесть и скопировать. Я использую pptx-6.10
def duplicate_slide(pres,index):
template = pres.slides[index]
try:
blank_slide_layout = pres.slide_layouts[12]
except:
blank_slide_layout = pres.slide_layouts[len(pres.slide_layouts)]
copied_slide = pres.slides.add_slide(blank_slide_layout)
for shp in template.shapes:
el = shp.element
newel = copy.deepcopy(el)
copied_slide.shapes._spTree.insert_element_before(newel, 'p:extLst')
for _, value in six.iteritems(template.part.rels):
# Make sure we don't copy a notesSlide relation as that won't exist
if "notesSlide" not in value.reltype:
copied_slide.part.rels.add_relationship(value.reltype,
value._target,
value.rId)
return copied_slide
Затем вы можете создать копию с передачей в своей презентации и индексом слайда вашего шаблона:
copied_slide = duplicate_slide(pres, 4)
Я все еще работаю над редактированием фигур из скопированного слайда, как только я буду дальше в своем проекте, я могу обновить
Извините за задержку, я был перемещен в другой проект. Я смог завершить свой проект ppt, используя несколько слайдов шаблонов и копируя их. В конце построения презентации я удаляю шаблоны. Чтобы захватить фигуры, вам нужно будет пройтись по слайду и найти название фигуры, которую вы ищете. Как только вы это вернули, вы можете отредактировать форму по мере необходимости. Я добавил версию функции add_text, которую я использую для заполнения shape.text_frame.
def find_shape_by_name(shapes,name):
for shape in shapes:
if shape.name == name:
return shape
return None
def add_text(shape,text,alignment=None):
if alignment:
shape.vertical_anchor = alignment
tf = shape.text_frame
tf.clear()
run = tf.paragraphs[0].add_run()
run.text = text if text else ''
Чтобы найти форму "слайд_титл"
slide_title = find_shape_by_name(slide.shapes,'slide_title')
Чтобы добавить текст в форму
add_text(slide_title,'TEST SLIDE')
Пожалуйста, дайте мне знать, если вам нужна другая помощь
Так как я также нашел другой сценарий использования кода, предоставленного @d_bergeron, я просто хотел поделиться им здесь. В моем случае я хотел скопировать слайд из другой презентации в ту, которую я создал с помощью python-pptx:
В качестве аргумента я передаю объект Presentation(), который я создал с помощью python-pptx (prs = Presenation()).
from pptx import Presentation
import copy
def copy_slide_from_external_prs(prs):
# copy from external presentation all objects into the existing presentation
external_pres = Presentation("PATH/TO/PRES/TO/IMPORT/from.pptx")
# specify the slide you want to copy the contents from
ext_slide = external_pres.slides[0]
# Define the layout you want to use from your generated pptx
SLD_LAYOUT = 5
slide_layout = prs.slide_layouts[SLD_LAYOUT]
# create now slide, to copy contents to
curr_slide = prs.slides.add_slide(slide_layout)
# now copy contents from external slide, but do not copy slide properties
# e.g. slide layouts, etc., because these would produce errors, as diplicate
# entries might be generated
for shp in ext_slide.shapes:
el = shp.element
newel = copy.deepcopy(el)
curr_slide.shapes._spTree.insert_element_before(newel, 'p:extLst')
return prs
В основном я публикую его здесь, так как я искал способ скопировать внешний слайд в свою презентацию и оказался в этой теме.