使用Python批量生成PPT版榮譽(yù)證書(shū)的示例代碼
一、Python處理PPT
使用Python處理PPT文件通常需要使用第三方庫(kù)來(lái)簡(jiǎn)化對(duì)PPT文件的讀取、寫(xiě)入和修改操作。下面介紹一些常用的Python庫(kù)和它們的功能:
python-pptx:這是一個(gè)流行的Python庫(kù),用于創(chuàng)建、讀取和修改PPTX(Office Open XML格式)文件。您可以使用它創(chuàng)建新的幻燈片、添加文本、圖像和形狀,還可以修改幻燈片的樣式和布局。
python-pptx-template:這個(gè)庫(kù)在python-pptx的基礎(chǔ)上增加了對(duì)模板的支持。您可以使用預(yù)定義的PPTX文件作為模板,然后在模板的基礎(chǔ)上進(jìn)行修改和生成新的演示文稿。
python-com-pptx:這是一個(gè)用于操作PPT文件的Windows COM庫(kù)。它可以與Microsoft PowerPoint應(yīng)用程序進(jìn)行交互,允許您通過(guò)Python腳本控制和修改PPT文件。
pptx2pdf:這個(gè)庫(kù)用于將PPT文件轉(zhuǎn)換為PDF格式。它依賴(lài)于LibreOffice來(lái)進(jìn)行轉(zhuǎn)換,因此需要確保系統(tǒng)中已安裝LibreOffice。
這里是一個(gè)使用python-pptx庫(kù)創(chuàng)建簡(jiǎn)單幻燈片的示例:
from pptx import Presentation # 創(chuàng)建一個(gè)新的PPT文件 presentation = Presentation() # 添加一張幻燈片 slide = presentation.slides.add_slide(presentation.slide_layouts[5]) # 在幻燈片中添加標(biāo)題和內(nèi)容 title = slide.shapes.title content = slide.placeholders[1] title.text = "歡迎使用Python處理PPT" content.text = "這是一個(gè)使用python-pptx庫(kù)創(chuàng)建的演示文稿示例。" # 保存PPT文件 presentation.save("example.pptx")
請(qǐng)注意,您需要在運(yùn)行腳本之前先安裝相應(yīng)的庫(kù)。您可以使用 pip
來(lái)安裝這些庫(kù):
pip install python-pptx pip install python-pptx-template pip install comtypes # 用于python-com-pptx
使用Python處理PPT文件有許多好處:
- 自動(dòng)化:Python可以幫助您自動(dòng)完成與PowerPoint有關(guān)的重復(fù)性任務(wù),比如創(chuàng)建演示文稿、更新內(nèi)容、添加幻燈片或格式化元素。這可以節(jié)省大量時(shí)間和精力。
- 靈活性:Python提供了許多可以操作PPT文件的庫(kù)和模塊,讓您可以進(jìn)行各種操作,包括讀取、寫(xiě)入、修改和提取數(shù)據(jù)。
- 庫(kù)支持:有特定的Python庫(kù),如
python-pptx
,可以簡(jiǎn)化處理PowerPoint文件的復(fù)雜性,提供簡(jiǎn)單的API供開(kāi)發(fā)人員使用。 - 定制化:使用Python,您可以根據(jù)動(dòng)態(tài)數(shù)據(jù)或用戶(hù)輸入來(lái)定制PowerPoint演示文稿。例如,您可以將來(lái)自不同來(lái)源的數(shù)據(jù)合并到預(yù)先設(shè)計(jì)好的模板中,創(chuàng)建個(gè)性化的報(bào)告或演示文稿。
- 集成性:Python可以輕松與在數(shù)據(jù)分析、數(shù)據(jù)處理和報(bào)告流程中常用的其他工具和系統(tǒng)集成。這樣,您可以將PPT生成與數(shù)據(jù)處理和分析結(jié)合起來(lái),創(chuàng)建全面且有見(jiàn)地的演示文稿。
- 文本處理和數(shù)據(jù)提?。篜ython強(qiáng)大的文本處理能力使您可以從現(xiàn)有的PowerPoint演示文稿中提取信息。您可以搜索特定文本,從幻燈片中提取數(shù)據(jù),甚至生成結(jié)構(gòu)化數(shù)據(jù)以進(jìn)行進(jìn)一步的分析。
- 協(xié)作:使用Python處理PPT文件,您可以促進(jìn)團(tuán)隊(duì)成員之間的協(xié)作,使他們可以以編程方式生成和更新演示文稿,減少手動(dòng)錯(cuò)誤并確保一致性。
- 跨平臺(tái):Python是一種跨平臺(tái)語(yǔ)言,這意味著您的PPT處理腳本可以在不同的操作系統(tǒng)上運(yùn)行,提供了靈活性和便捷性。
- 節(jié)省成本:Python是一種開(kāi)源語(yǔ)言,用于PPT處理的庫(kù)也是免費(fèi)提供的。這使得Python成為處理PowerPoint文件的一種經(jīng)濟(jì)高效的解決方案。
總的來(lái)說(shuō),Python的簡(jiǎn)單性、豐富的庫(kù)支持和自動(dòng)化任務(wù)的能力使其成為處理PowerPoint文件的優(yōu)秀選擇,無(wú)論您是想自動(dòng)化演示文稿、從幻燈片中分析數(shù)據(jù)還是生成動(dòng)態(tài)報(bào)告。
二、批量生成PPT版榮譽(yù)證書(shū)
技術(shù)工具:
Python版本:3.9
代碼編輯器:jupyter notebook
每到學(xué)期末,幼兒園的小朋友除了讓家長(zhǎng)帶上床上用品等回家,還有一張“好孩子”的“榮譽(yù)證書(shū)”。這個(gè)不像大朋友或者成人的榮譽(yù)證書(shū),必須是通過(guò)激烈競(jìng)爭(zhēng)而只有少數(shù)人才能獲得的。這個(gè)可是人手一份的,大家都是“好孩子”。如果有小朋友沒(méi)有拿到這個(gè)榮譽(yù)證書(shū),家長(zhǎng)和小孩子可不愿意了,非得找老師理論不可,哈哈。朋友所在的幼兒園每學(xué)期都要搞這個(gè)事情,整個(gè)幼兒園近400份榮譽(yù)證書(shū),一個(gè)一個(gè)填寫(xiě),專(zhuān)人要填幾天。這不,這次園長(zhǎng)讓朋友來(lái)填,真愁死人了!于是朋友跑來(lái)親切地詢(xún)問(wèn)我是否可以代勞。好吧,朋友相求,必須拍胸脯保證行啊。
此處,需要用到第三方庫(kù)`pptx`。這個(gè)是專(zhuān)門(mén)用來(lái)創(chuàng)建和修改PPT幻燈片的庫(kù)(PPT文件必須是.pptx為后綴的)。我們先安裝這個(gè)庫(kù),步驟如下:
1. Windows徽標(biāo)鍵+字母鍵R,輸入"cmd”運(yùn)行命令輸入窗口
2. 輸入"pip install python-pptx",耐心等待下載及安裝
有時(shí)候網(wǎng)絡(luò)太差,下載到中途會(huì)崩潰,也可以直接去這個(gè)庫(kù)所在的網(wǎng)站(python-pptx · PyPI)用迅雷下載到本地盤(pán),再安裝。比如我將這個(gè)下載好的壓縮文件解壓到E盤(pán),然后打開(kāi)運(yùn)行cmd,輸入"E:"進(jìn)入E盤(pán),再輸入"cd python-pptx-0.6.18"進(jìn)入其所在文件夾,最后輸入"python setup.py install"進(jìn)行安裝。
如下是安裝完成的提示,然后就可以使用了。
首先,需要在幻燈片母版的第一個(gè)版式中設(shè)置好模板,以便后面用程序調(diào)用:
此處,模板中插入了一張榮譽(yù)證書(shū)的背景圖片,然后將文字部分分成了6個(gè)文本框(可根據(jù)實(shí)際情況靈活調(diào)整),在其中填入內(nèi)容,設(shè)置好字體和字號(hào)。
在power point軟件中設(shè)置好模板之后,需要用程序讀取一下模板中的文本框所對(duì)應(yīng)的編號(hào),即占位符(placeholder)的ID。由于PPT中一頁(yè)幻燈片的占位符編號(hào)隨著PPT的不斷更改,不一定是按1,2,3這樣的順序排列的,只有讀取一下才知道。
from pptx import Presentation prs = Presentation('data\榮譽(yù)證書(shū)模板.pptx') slide = prs.slides.add_slide(prs.slide_layouts[0]) # 第一個(gè)模板的第0個(gè)板式 for ph in slide.placeholders: #遍歷這頁(yè)P(yáng)PT的所有占位符 phf = ph.placeholder_format #獲取占位符的格式 print(phf.idx) #打印其ID編號(hào) ph.text = str(phf.idx)# 將編號(hào)寫(xiě)入PPT對(duì)應(yīng)的位置中,以便后面一一對(duì)應(yīng) # 以上讀取到占位符的ID方便后面調(diào)用 prs.save('data\榮譽(yù)證書(shū)模板-占位符編號(hào).pptx')
以上,我們先導(dǎo)入安裝好的`pptx`庫(kù)中的`Presentation`(演示文稿/幻燈片)模塊,然后打開(kāi)對(duì)應(yīng)路徑下的PPT模板,并存入`prs`變量。然后通過(guò)`prs.slides.add_slide`以母版中的第一個(gè)模板新增1張幻燈片。模板的版式編號(hào)是從0開(kāi)始的,所以第一個(gè)版式對(duì)應(yīng)的是`[0]`。然后遍歷這頁(yè)P(yáng)PT的所有占位符,獲取其占位符的格式,存入`phf`變量。然后通過(guò)`phf.idx`打印其ID編號(hào)。如上,我們可以看到結(jié)果。隨后通過(guò)`ph.text`將編號(hào)寫(xiě)入PPT對(duì)應(yīng)的位置中,以便后面一一對(duì)應(yīng)。由下圖可見(jiàn),其編號(hào)從上到下是10~15。
模板做好,占位符ID確定后,就需要讀取幼兒園所有小朋友的班級(jí)和名字信息,然后寫(xiě)入了。小朋友的信息存在現(xiàn)有的Excel表格中,使用`openpyxl`庫(kù)讀取出來(lái)即可。下面就來(lái)讀取吧。
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]
以上,將名單中的班級(jí)和姓名信息按“班級(jí)”為鍵,“姓名”組成的列表為值存入字典`data`。通過(guò)`data['小一'][:10]`查看一下小一班前10個(gè)同學(xué)的數(shù)據(jù)。下面開(kāi)始批量寫(xiě)入PPT。
import time t0=time.time()# 程序開(kāi)始運(yùn)行的時(shí)間 prs = Presentation('data\榮譽(yù)證書(shū)模板.pptx') slide_layout = prs.slide_layouts[0] #調(diào)用設(shè)置好的母版,因?yàn)槭悄赴娴牡谝话媸?,所以取[0] for class_id in data: for name in data[class_id]: slide = prs.slides.add_slide(slide_layout) #以母版的版式為基礎(chǔ)新增一頁(yè)幻燈片 #往幻燈片中寫(xiě)入內(nèi)容 slide.placeholders[10].text = "{} 班 {} 同學(xué):".format(class_id,name) #此處是班級(jí)和姓名 slide.placeholders[11].text = "在2019-2020學(xué)年度第一學(xué)期獲得" slide.placeholders[12].text = "“好孩子”稱(chēng)號(hào)。" slide.placeholders[13].text = "特發(fā)此證,以資鼓勵(lì)。" slide.placeholders[14].text = "市幼兒園" slide.placeholders[15].text = "2020年1月" prs.save('data\榮譽(yù)證書(shū)(總).pptx') t1 = time.time() print('程序用時(shí):',str(round(t1-t0))+'秒。')
400名小朋友的獎(jiǎng)狀只用了8秒鐘寫(xiě)完。以上,通過(guò)`for`循環(huán)先獲取班級(jí),然后第二個(gè)`for`循環(huán)獲取該班級(jí)下面對(duì)應(yīng)的姓名,對(duì)于每個(gè)姓名,通過(guò)`prs.slides.add_slide`新建一頁(yè)幻燈片,然后按我們先前獲取的占位符ID,寫(xiě)入內(nèi)容。除了班級(jí)和姓名,其它都是固定的內(nèi)容。寫(xiě)入完成后,保存打印即可。而且PPT里是按班級(jí)排序的,這樣每個(gè)班級(jí)的榮譽(yù)證書(shū)在打印后會(huì)集中在一起,方便區(qū)分。
以上就是使用Python批量生成PPT版榮譽(yù)證書(shū)的示例代碼的詳細(xì)內(nèi)容,更多關(guān)于Python生成PPT版榮譽(yù)證書(shū)的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Python 編碼Basic Auth使用方法簡(jiǎn)單實(shí)例
這篇文章主要介紹了 Python 編碼Basic Auth使用方法簡(jiǎn)單實(shí)例的相關(guān)資料,需要的朋友可以參考下2017-05-05Python爬蟲(chóng)實(shí)現(xiàn)“盜取”微信好友信息的方法分析
這篇文章主要介紹了Python爬蟲(chóng)實(shí)現(xiàn)“盜取”微信好友信息的方法,結(jié)合實(shí)例形式分析了Python針對(duì)微信數(shù)據(jù)信息爬取的相關(guān)操作技巧,需要的朋友可以參考下2019-09-09python 篩選數(shù)據(jù)集中列中value長(zhǎng)度大于20的數(shù)據(jù)集方法
今天小編就為大家分享一篇python 篩選數(shù)據(jù)集中列中value長(zhǎng)度大于20的數(shù)據(jù)集方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-06-06Python實(shí)現(xiàn)快速計(jì)算詞頻功能示例
這篇文章主要介紹了Python實(shí)現(xiàn)快速計(jì)算詞頻功能,結(jié)合實(shí)例形式總結(jié)分析了Python使用nltk庫(kù)進(jìn)行詞頻計(jì)算功能的相關(guān)操作技巧,需要的朋友可以參考下2018-06-06python開(kāi)啟多個(gè)子進(jìn)程并行運(yùn)行的方法
這篇文章主要介紹了python開(kāi)啟多個(gè)子進(jìn)程并行運(yùn)行的方法,涉及Python進(jìn)程操作的相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-04-04對(duì)python中兩種列表元素去重函數(shù)性能的比較方法
今天小編就為大家分享一篇對(duì)python中兩種列表元素去重函數(shù)性能的比較方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-06-06Python設(shè)計(jì)模式中單例模式的實(shí)現(xiàn)及在Tornado中的應(yīng)用
這篇文章主要介紹了Python設(shè)計(jì)模式中單例模式的實(shí)現(xiàn)及在Tornado中的應(yīng)用,講解了單例模式用于設(shè)計(jì)Tornado框架中的線程控制方面的相關(guān)問(wèn)題,需要的朋友可以參考下2016-03-03