当前位置:  首页>> 技术小册>> Python与办公-玩转PPT

我简单阅读了一下python-pptx的源码,并没有发现它提供删除幻灯片的相关方法,但我们可以从添加幻灯片的方法找到突破口。先看看add_slide()方法的源码:

  1. def add_slide(self,slide_layout):
  2. """
  3. Return a newly added slide that inherits layout from *slide_
  4. layout*.
  5. """
  6. rId,slide = self.part.add_slide(slide_layout)
  7. slide.shapes.clone_layout_placeholders(slide_layout)
  8. self._sldIdLst.add_sldId(rId)
  9. return slide

可以发现添加一个Slide对象,实际上在创建完Slide对象之后会把它添加到_sldIdLst这个容器里面,是不是意味着我们只要把它从_sldIdLst里删除了就相当于删除幻灯片了呢?是的,不过需要操作元素标签,应该还记得在python-docx那里介绍过怎么删除段落吧,就是通过标签的remove()方法,这里删除页面的方法也差不多,我还是先上代码吧:

  1. from pptx import Presentation
  2. ppt = Presentation"./ppt_ files/测试文档1.pptx"
  3. sld_list = list(ppt.slides._sldIdLst)
  4. for i in [1,2]:
  5. slide_el = sld_list[i]
  6. ppt.slides._sldIdLst.remove(slide_el)
  7. ppt.save("./ppt_ files/test.pptx")

在代码中,我通过list()把_sldIdLst这个容器强转成一个list对象,因为它本来是CT_SlideIdList类型,我们没办法通过下标获取对应的幻灯片对象,转成list对象之后就可以使用索引获取元素了,之后再使用remove()方法删除元素即可。我在代码中删除的是索引为1和2的元素,也就是删除掉第2和第3张幻灯片,代码执行完之后,打开PPT文档看看就清楚了。


该分类下的相关小册推荐: