victory的博客

长安一片月,万户捣衣声

0%

python-pptx | 批量生成PPT版荣誉证书

批量生成PPT版荣誉证书

以下代码实现了根据一个excel名单和一个荣誉证书模板批量生成名单中所有人的荣誉证书。

import time
from pptx import Presentation
from openpyxl import load_workbook

prs = Presentation(r'data\荣誉证书模板.pptx')
slide = prs.slides.add_slide(prs.slide_layouts[0])  # 第一个模板的第0个板式
for ph in slide.placeholders:  # 遍历这页PPT的所有占位符
    phf = ph.placeholder_format  # 获取占位符的格式
    print(phf.idx)  # 打印其ID编号
    ph.text = str(phf.idx)  # 将编号写入PPT对应的位置中,以便后面一一对应
# 以上读取到占位符的ID方便后面调用
prs.save(r'data\荣誉证书模板-占位符编号.pptx')


wb = load_workbook(r"data\名单.xlsx")
ws = wb.active
data = {}
for row in range(2, ws.max_row + 1):
    class_id = ws['A' + str(row)].value
    name = ws['B' + str(row)].value
    data.setdefault(class_id, [])
    data[class_id].append(name)

t0 = time.time()  # 程序开始运行的时间

prs = Presentation(r'data\荣誉证书模板.pptx')
slide_layout = prs.slide_layouts[0]  # 调用设置好的母版,因为是母版的第一版式,所以取[0]
for class_id in data:
    for name in data[class_id]:
        slide = prs.slides.add_slide(slide_layout)  # 以母版的版式为基础新增一页幻灯片
        # 往幻灯片中写入内容
        slide.placeholders[10].text = "{} 班 {} 同学:".format(class_id, name)  # 此处是班级和姓名
        slide.placeholders[11].text = "在2019-2020学年度第一学期获得"
        slide.placeholders[12].text = "“好孩子”称号。"
        slide.placeholders[13].text = "特发此证,以资鼓励。"
        slide.placeholders[14].text = "市幼儿园"
        slide.placeholders[15].text = "2020年1月"
prs.save('data\荣誉证书(总).pptx')
t1 = time.time()

print('程序用时:', str(round(t1 - t0)) + '秒。')

荣誉证书模板.pptx
下载名单.xlsx