python批量制作ppt_实例25_批量生成PPT版荣誉证书
到學(xué)期末,幼兒園的小朋友除了讓家長帶上床上用品等回家,還有一張“好孩子”的“榮譽(yù)證書”。這個(gè)不像大朋友或者成人的榮譽(yù)證書,必須是通過激烈競爭而只有少數(shù)人才能獲得的。這個(gè)可是人手一份的,大家都是“好孩子”。如果有小朋友沒有拿到這個(gè)榮譽(yù)證書,家長和小孩子可不愿意了,非得找老師理論不可,哈哈。
老婆所在的幼兒園每學(xué)期都要搞這個(gè)事情,整個(gè)幼兒園近400份榮譽(yù)證書,一個(gè)一個(gè)填寫,專人要填幾天。這不,這次園長讓老婆來填,真愁死人了!老婆知道我在鼓搗編程什么的,跑來親切地詢問是否可以代勞。好吧,領(lǐng)導(dǎo)相求,必須拍胸脯保證行啊。
此處,需要用到第三方庫pptx。這個(gè)是專門用來創(chuàng)建和修改PPT幻燈片的庫(PPT文件必須是.pptx為后綴的)。我們先安裝這個(gè)庫,步驟如下:Windows徽標(biāo)鍵+字母鍵R,輸入"cmd”運(yùn)行命令輸入窗口
2. 輸入"pip install python-pptx",耐心等待下載及安裝
有時(shí)候網(wǎng)絡(luò)太差,下載到中途會崩潰,也可以直接去這個(gè)庫所在的網(wǎng)站(python-pptx )用迅雷下載到本地盤,再安裝。比如我將這個(gè)下載好的壓縮文件解壓到E盤,然后打開運(yùn)行cmd,輸入"E:"進(jìn)入E盤,再輸入"cd python-pptx-0.6.18"進(jìn)入其所在文件夾,最后輸入"python setup.py install"進(jìn)行安裝。
如下是安裝完成的提示,然后就可以使用了。
首先,需要在幻燈片母版的第一個(gè)版式中設(shè)置好模板,以便后面用程序調(diào)用:
此處,模板中插入了一張榮譽(yù)證書的背景圖片,然后將文字部分分成了6個(gè)文本框(可根據(jù)實(shí)際情況靈活調(diào)整),在其中填入內(nèi)容,設(shè)置好字體和字號。
在power point軟件中設(shè)置好模板之后,需要用程序讀取一下模板中的文本框所對應(yīng)的編號,即占位符(placeholder)的ID。由于PPT中一頁幻燈片的占位符編號隨著PPT的不斷更改,不一定是按1,2,3這樣的順序排列的,只有讀取一下才知道。
from pptx import Presentation
prs = Presentation('data\榮譽(yù)證書模板.pptx')
slide = prs.slides.add_slide(prs.slide_layouts[0]) # 第一個(gè)模板的第0個(gè)板式
for ph in slide.placeholders: #遍歷這頁P(yáng)PT的所有占位符
phf = ph.placeholder_format #獲取占位符的格式
print(phf.idx) #打印其ID編號
ph.text = str(phf.idx)# 將編號寫入PPT對應(yīng)的位置中,以便后面一一對應(yīng)
# 以上讀取到占位符的ID方便后面調(diào)用
prs.save('data\榮譽(yù)證書模板-占位符編號.pptx')
>>
10
11
12
13
14
15
以上,我們先導(dǎo)入安裝好的pptx庫中的Presentation(演示文稿/幻燈片)模塊,然后打開對應(yīng)路徑下的PPT模板,并存入prs變量。然后通過prs.slides.add_slide以母版中的第一個(gè)模板新增1張幻燈片。模板的版式編號是從0開始的,所以第一個(gè)版式對應(yīng)的是[0]。然后遍歷這頁P(yáng)PT的所有占位符,獲取其占位符的格式,存入phf變量。然后通過phf.idx打印其ID編號。如上,我們可以看到結(jié)果。隨后通過ph.text將編號寫入PPT對應(yīng)的位置中,以便后面一一對應(yīng)。由下圖可見,其編號從上到下是10~15。
模板做好,占位符ID確定后,就需要讀取幼兒園所有小朋友的班級和名字信息,然后寫入了。小朋友的信息存在現(xiàn)有的Excel表格中,使用openpyxl庫讀取出來即可。下面就來讀取吧。
from openpyxl import load_workbook
wb = load_workbook("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)
data['小一'][:10]
>>['張1', '李1', '李13', '王9', '王21', '王33', '王45', '王57', '王69', '王81']
以上,將名單中的班級和姓名信息按“班級”為鍵,“姓名”組成的列表為值存入字典data。其中setdefault的用法在實(shí)例19中有詳細(xì)解釋,請參考data['小一'][:10]查看一下小一班前10個(gè)同學(xué)的數(shù)據(jù)。下面開始批量寫入PPT。
import time
t0=time.time()# 程序開始運(yùn)行的時(shí)間
prs = Presentation('data\榮譽(yù)證書模板.pptx')
slide_layout = prs.slide_layouts[0] #調(diào)用設(shè)置好的母版,因?yàn)槭悄赴娴牡谝话媸?#xff0c;所以取[0]
for class_id in data:
for name in data[class_id]:
slide = prs.slides.add_slide(slide_layout) #以母版的版式為基礎(chǔ)新增一頁幻燈片
#往幻燈片中寫入內(nèi)容
slide.placeholders[10].text = "{}班{}同學(xué):".format(class_id,name) #此處是班級和姓名
slide.placeholders[11].text = "在2019-2020學(xué)年度第一學(xué)期獲得"
slide.placeholders[12].text = "“好孩子”稱號。"
slide.placeholders[13].text = "特發(fā)此證,以資鼓勵。"
slide.placeholders[14].text = "市幼兒園"
slide.placeholders[15].text = "2020年1月"
prs.save('data\榮譽(yù)證書(總).pptx')
t1 = time.time()
print('程序用時(shí):',str(round(t1-t0))+'秒。')
>>程序用時(shí): 8秒。
400名小朋友的獎狀只用了8秒鐘寫完。以上,通過for循環(huán)先獲取班級,然后第二個(gè)for循環(huán)獲取該班級下面對應(yīng)的姓名,對于每個(gè)姓名,通過prs.slides.add_slide新建一頁幻燈片,然后按我們先前獲取的占位符ID,寫入內(nèi)容。除了班級和姓名,其它都是固定的內(nèi)容。寫入完成后,保存打印即可。而且PPT里是按班級排序的,這樣每個(gè)班級的榮譽(yù)證書在打印后會集中在一起,方便區(qū)分。
如果您有需要處理的問題,可發(fā)郵件到我郵箱:donyo@qq.com,一起探討解決方案。
以上在Jupyter notebook上完成,所用到的代碼及Excel 資料已上傳GitHub及百度網(wǎng)盤, 歡迎下載到本地隨意玩。
Python版本:Python 3.6 64bit
操作系統(tǒng):Windows 7
GitHub:Office_Automation_by_Using_Python
百度Pan:“pan.baidu”加上“.com/s/1WXcoYts_uNJmccfJ0lrmWg” 提取碼: kry7
WeiXin:Python操作Office軟件高效工作
總結(jié)
以上是生活随笔為你收集整理的python批量制作ppt_实例25_批量生成PPT版荣誉证书的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 此更新不适用于您的计算机 kb40122
- 下一篇: java之映射