我简单阅读了一下python-pptx的源码,并没有发现它提供删除幻灯片的相关方法,但我们可以从添加幻灯片的方法找到突破口。先看看add_slide()方法的源码:
def add_slide(self,slide_layout):
"""
Return a newly added slide that inherits layout from *slide_
layout*.
"""
rId,slide = self.part.add_slide(slide_layout)
slide.shapes.clone_layout_placeholders(slide_layout)
self._sldIdLst.add_sldId(rId)
return slide
可以发现添加一个Slide对象,实际上在创建完Slide对象之后会把它添加到_sldIdLst这个容器里面,是不是意味着我们只要把它从_sldIdLst里删除了就相当于删除幻灯片了呢?是的,不过需要操作元素标签,应该还记得在python-docx那里介绍过怎么删除段落吧,就是通过标签的remove()方法,这里删除页面的方法也差不多,我还是先上代码吧:
from pptx import Presentation
ppt = Presentation("./ppt_ files/测试文档1.pptx")
sld_list = list(ppt.slides._sldIdLst)
for i in [1,2]:
slide_el = sld_list[i]
ppt.slides._sldIdLst.remove(slide_el)
ppt.save("./ppt_ files/test.pptx")
在代码中,我通过list()把_sldIdLst这个容器强转成一个list对象,因为它本来是CT_SlideIdList类型,我们没办法通过下标获取对应的幻灯片对象,转成list对象之后就可以使用索引获取元素了,之后再使用remove()方法删除元素即可。我在代码中删除的是索引为1和2的元素,也就是删除掉第2和第3张幻灯片,代码执行完之后,打开PPT文档看看就清楚了。