Python-pptx:复制幻灯片

R N*_*R N 8 python python-pptx

如何复制幻灯片?

我创建了一个模板幻灯片,我需要复制它并分别编辑每个副本的形状。

或者如何将我的模板幻灯片添加到presentation.slide_layouts?

小智 7

这是我在 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
Run Code Online (Sandbox Code Playgroud)

然后,您可以通过传入演示文稿和模板的幻灯片索引来创建副本:

copied_slide = duplicate_slide(pres, 4)
Run Code Online (Sandbox Code Playgroud)

我仍在编辑复制的幻灯片中的形状,一旦我在我的项目中进一步发展,我就可以更新


小智 6

我发现了@d_bergeron 共享的代码的另一个用例,我想将另一个演示文稿中的幻灯片复制到我使用 python-pptx 生成的演示文稿中:

作为参数,我传入Presentation()使用 python-pptx ( ) 创建的对象prs = Presentation()

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
Run Code Online (Sandbox Code Playgroud)


小智 6

我想展示我复制幻灯片的解决方法。我使用模板ppt并填充它。在填充幻灯片之前,我知道需要复制模板的哪些幻灯片以及复制频率。然后我要做的是复制幻灯片并用复制的幻灯片保存新的ppt。保存后,我可以使用复制的幻灯片打开 ppt 并使用 pptx 填充幻灯片。

import win32com.client
ppt_instance = win32com.client.Dispatch('PowerPoint.Application')
#open the powerpoint presentation headless in background
read_only = True
has_title = False
window    = False
prs = ppt_instance.Presentations.open('path/ppt.pptx',read_only,has_title,window)

nr_slide = 1
insert_index = 1
prs.Slides(nr_slide).Copy()
prs.Slides.Paste(Index=insert_index)

prs.SaveAs('path/new_ppt.pptx')
prs.Close()

#kills ppt_instance
ppt_instance.Quit()
del ppt_instance
Run Code Online (Sandbox Code Playgroud)

在这种情况下,第一张幻灯片将复制演示文稿并插入到同一演示文稿的第一张幻灯片之后。

希望这对你们中的一些人有所帮助!

  • 这是一个非常有趣的方法,感谢您将其添加到此线程中。我一直在寻找一种使用 python-pptx 复制幻灯片的好方法,但这效果更好。 (3认同)