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

虽然我们能拿到所有占位符,但还不能填充它们,因为要先知道它是什么类型的占位符才能去填充,比如说用图片去填充一个文本框类型的占位符就不合适了,那么我们怎么知道占位符是什么类型呢?Shape对象有一个placeholder_format属性,通过它可以拿到占位符的信息,代码如下:

  1. from pptx import Presentation
  2. ppt = Presentation()
  3. slide = ppt.slides.add_slide(ppt.slide_layouts[8])
  4. for placeholder in slide.placeholders:
  5. phf = placeholder.placeholder_format
  6. print(phf.idx,phf.type)
  7. # 输出:
  8. # 0 TITLE (1)
  9. # 1 PICTURE (18)
  10. # 2 BODY (2)

通过访问placeholder_format属性得到的是一个_PlaceholderFormat对象,它的idx属性表示该占位符在幻灯片的顺序位置,即第几个占位符(下标从0开始),它的type属性表示该占位符的类型。上面的代码使用的是第8个布局,它有TITLE(标题)、PICTURE(图片)和BODY(正文)三个占位符,对应的占位符类型id分别是1、18和2。只知道这三种占位符类型好像也不太够用啊,实际上占位符类型一共有20种,被定义在PP_PLACEHOLDER_TYPE枚举类里,我们还是老样子,遍历一下该枚举类就可以拿到所有类型了,代码如下:

  1. from pptx.enum.shapes import PP_PLACEHOLDER_TYPE
  2. print(len(PP_PLACEHOLDER_TYPE._ _members_ _)) # 输出:20
  3. for pt in PP_PLACEHOLDER_TYPE._ _members_ _:
  4. print(pt.name,pt.value)
  5. # 输出:
  6. # BITMAP BITMAP (9)
  7. # BODY BODY (2)
  8. # CENTER_TITLE CENTER_TITLE (3)
  9. # CHART CHART (8)
  10. # ...

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