[Python] 自動(dòng)化辦公 批量生成獎(jiǎng)狀

轉(zhuǎn)載請(qǐng)注明:陳熹 chenx6542@foxmail.com (簡(jiǎn)書(shū)號(hào):半為花間酒)
若公眾號(hào)內(nèi)轉(zhuǎn)載請(qǐng)聯(lián)系公眾號(hào):早起Python

這篇文章能學(xué)到的主要內(nèi)容:

  1. openpyxl 讀取 Excel 文件
  2. python-pptx 寫入 PPT 文件
  3. PPT 占位符相關(guān)知識(shí)

練習(xí)數(shù)據(jù):https://pan.baidu.com/s/1NGtNg-idEt0Wu2JW0gwwgQ 提取碼:c5np

需求描述

你是一名幼兒園老師,本學(xué)期即將結(jié)束你要給 400 個(gè)小朋友制作獎(jiǎng)狀,手上有一份名單 list.xlsx 和 PPT 模板 temp.pptx

現(xiàn)在要給每個(gè)小朋友都制作一個(gè)獎(jiǎng)狀千扔,你決定使用 Python 來(lái)實(shí)現(xiàn)

前置知識(shí)與邏輯梳理

完成本案例需要理解兩個(gè)概念:版式占位符

一沸毁、版式

版式的選擇和設(shè)置操作如下圖柠硕。基本上幻燈片頁(yè)的添加是基于一個(gè)完整的版式,確定完了版式后再在上面添加內(nèi)容:

我們打開(kāi)需求模板 temp.pptx 后會(huì)發(fā)現(xiàn)沒(méi)有任何一頁(yè):

點(diǎn)擊創(chuàng)建后就會(huì)出現(xiàn)一個(gè)新的頁(yè)面,這個(gè)是我已解決在版式中預(yù)設(shè)好的:

仔細(xì)看會(huì)發(fā)現(xiàn)耳峦,在預(yù)覽狀態(tài)下是看不見(jiàn)模板上這些字的,同樣點(diǎn)擊輸入后也會(huì)發(fā)現(xiàn)字會(huì)不見(jiàn)焕毫。原因是這些文本框不是真實(shí)的形狀蹲坷,而是占位符

二驶乾、占位符

有了上面兩個(gè)概念的認(rèn)識(shí),我們就可以梳理創(chuàng)建 PPT 文件的邏輯:

代碼操作 PPT 創(chuàng)建文件的基本邏輯是:

  1. 創(chuàng)建一個(gè) PPT
  2. 從幻燈片母版中確定一個(gè)版式
  3. 在不同的占位符中填寫不同的內(nèi)容

明白了邏輯后又出現(xiàn)了一個(gè)新的問(wèn)題:我們的模板中有多個(gè)占位符循签,如何確定占位符并往相應(yīng)的占位符里填寫內(nèi)容级乐?
答案很簡(jiǎn)單,每個(gè)占位符都有自己的編號(hào)县匠,在代碼中通過(guò)占位符編號(hào)就能夠確定指定的占位符了风科,具體見(jiàn)代碼實(shí)操

代碼實(shí)操

首先我們讀取 list.xlsx 文件:

from openpyxl import load_workbook
path = r'C:\xxx' # 根據(jù)自己的情況填寫模板和名單所在的路徑

workbook = load_workbook(path + r'\list.xlsx')
sheet = workbook.active

獲取每個(gè)小朋友的信息的方法很簡(jiǎn)單,通過(guò) for row in sheet.rows: 迭代獲取每一行聚唐,這是一個(gè)元祖丐重,指定位置就可以獲取具體參數(shù)了:

for row in sheet.rows:
    class_id = row[0].value
    name = row[1].value
    title = row[2].value
    print(class_id, name, title)

接下來(lái)是 PPT 部分的操作了腔召,在循環(huán)體外部要打開(kāi)模板:
(這里是看自己的需求杆查,本文中是將 400 個(gè)小朋友的獎(jiǎng)狀生成在 1 個(gè) PPT 文件中輸出,如果你想要輸出 400 份不同的文件臀蛛,就是在循環(huán)體內(nèi)部實(shí)例化以及保存了)

from pptx import Presentation
... # 之前打開(kāi) Excel 文件的代碼
pptx = Presentation(path + r'\temp.pptx')

然后就是以第一個(gè)版式創(chuàng)建幻燈片頁(yè)

slide = pptx.slides.add_slide(pptx.slide_layouts[0])

接下來(lái)可以通過(guò) shape.placeholder_format.idx 方法獲取占位符編號(hào)亲桦,為了直觀直接在各自的占位符內(nèi)填寫自己的編號(hào)并輸出:

slide = pptx.slides.add_slide(pptx.slide_layouts[0])
for shape in slide.placeholders:
    shape.text = str(shape.placeholder_format.idx)

弄清楚占位符編號(hào)后用 slide.placeholders[編號(hào)].text = 填寫的內(nèi)容 就可以完成內(nèi)容填寫。由于本文是 400 份獎(jiǎng)狀產(chǎn)生在同一個(gè)文件中浊仆,因此是在循環(huán)體內(nèi)創(chuàng)建幻燈片頁(yè)并填寫客峭,最后在循環(huán)體外保存:

for row in sheet.rows:
    class_id = row[0].value
    name = row[1].value
    title = row[2].value
    print(class_id, name, title)
    slide = pptx.slides.add_slide(pptx.slide_layouts[0])
    slide.placeholders[10].text = f"{class_id} 班 {name} 小朋友:"
    slide.placeholders[11].text = "在2020-2021學(xué)年度第一學(xué)期獲得"
    slide.placeholders[12].text = f"“{title}”稱號(hào)。"
    slide.placeholders[13].text = "特發(fā)此證抡柿,以資鼓勵(lì)舔琅。"
    slide.placeholders[14].text = "太陽(yáng)市幼兒園"
    slide.placeholders[15].text = "2021年1月"'

pptx.save(path + r'\results.pptx')

成功生成了 400 個(gè)小朋友各自的獎(jiǎng)狀,需求完成洲劣!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末备蚓,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子囱稽,更是在濱河造成了極大的恐慌郊尝,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,826評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件战惊,死亡現(xiàn)場(chǎng)離奇詭異流昏,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)吞获,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,968評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門况凉,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人各拷,你說(shuō)我怎么就攤上這事茎刚。” “怎么了撤逢?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,234評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵膛锭,是天一觀的道長(zhǎng)粮坞。 經(jīng)常有香客問(wèn)我,道長(zhǎng)初狰,這世上最難降的妖魔是什么莫杈? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,562評(píng)論 1 293
  • 正文 為了忘掉前任术羔,我火速辦了婚禮宣谈,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘蕉朵。我一直安慰自己腥光,他們只是感情好关顷,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,611評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著武福,像睡著了一般议双。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上捉片,一...
    開(kāi)封第一講書(shū)人閱讀 51,482評(píng)論 1 302
  • 那天平痰,我揣著相機(jī)與錄音,去河邊找鬼伍纫。 笑死宗雇,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的莹规。 我是一名探鬼主播赔蒲,決...
    沈念sama閱讀 40,271評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼良漱!你這毒婦竟也來(lái)了舞虱?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,166評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤债热,失蹤者是張志新(化名)和其女友劉穎砾嫉,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體窒篱,經(jīng)...
    沈念sama閱讀 45,608評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡焕刮,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,814評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了墙杯。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片配并。...
    茶點(diǎn)故事閱讀 39,926評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖高镐,靈堂內(nèi)的尸體忽然破棺而出溉旋,到底是詐尸還是另有隱情,我是刑警寧澤嫉髓,帶...
    沈念sama閱讀 35,644評(píng)論 5 346
  • 正文 年R本政府宣布观腊,位于F島的核電站邑闲,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏梧油。R本人自食惡果不足惜苫耸,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,249評(píng)論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望儡陨。 院中可真熱鬧褪子,春花似錦、人聲如沸骗村。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,866評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)胚股。三九已至笼痛,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間信轿,已是汗流浹背晃痴。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,991評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工残吩, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留财忽,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,063評(píng)論 3 370
  • 正文 我出身青樓泣侮,卻偏偏與公主長(zhǎng)得像即彪,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子活尊,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,871評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容