虽然我们能拿到所有占位符,但还不能填充它们,因为要先知道它是什么类型的占位符才能去填充,比如说用图片去填充一个文本框类型的占位符就不合适了,那么我们怎么知道占位符是什么类型呢?Shape对象有一个placeholder_format属性,通过它可以拿到占位符的信息,代码如下:
from pptx import Presentation
ppt = Presentation()
slide = ppt.slides.add_slide(ppt.slide_layouts[8])
for placeholder in slide.placeholders:
phf = placeholder.placeholder_format
print(phf.idx,phf.type)
# 输出:
# 0 TITLE (1)
# 1 PICTURE (18)
# 2 BODY (2)
通过访问placeholder_format属性得到的是一个_PlaceholderFormat对象,它的idx属性表示该占位符在幻灯片的顺序位置,即第几个占位符(下标从0开始),它的type属性表示该占位符的类型。上面的代码使用的是第8个布局,它有TITLE(标题)、PICTURE(图片)和BODY(正文)三个占位符,对应的占位符类型id分别是1、18和2。只知道这三种占位符类型好像也不太够用啊,实际上占位符类型一共有20种,被定义在PP_PLACEHOLDER_TYPE枚举类里,我们还是老样子,遍历一下该枚举类就可以拿到所有类型了,代码如下:
from pptx.enum.shapes import PP_PLACEHOLDER_TYPE
print(len(PP_PLACEHOLDER_TYPE._ _members_ _)) # 输出:20
for pt in PP_PLACEHOLDER_TYPE._ _members_ _:
print(pt.name,pt.value)
# 输出:
# BITMAP BITMAP (9)
# BODY BODY (2)
# CENTER_TITLE CENTER_TITLE (3)
# CHART CHART (8)
# ...