Python讀取Excel數(shù)據(jù)實(shí)現(xiàn)批量生成PPT
背景
大家好,我是J哥。
我們常常面臨著大量的重復(fù)性工作,通過人工方式處理往往耗時(shí)耗力易出錯(cuò)。而Python
在辦公自動(dòng)化方面具有天然優(yōu)勢(shì),分分鐘解決你的辦公需求,提前下班不是夢(mèng)。
需求
前幾天我發(fā)表了一篇辦公自動(dòng)化文章Python讀取Excel數(shù)據(jù)并批量生成合同,獲得許多小伙伴的認(rèn)可和喜歡。其中有一位粉絲提議,能否出一篇PPT自動(dòng)化的教程,通過讀取Excel
數(shù)據(jù)批量生成幻燈片。于是,我以豆瓣電影數(shù)據(jù)為例進(jìn)行了PPT自動(dòng)化制作,先看看最終效果:
準(zhǔn)備
PPT數(shù)據(jù)
我們首先需要準(zhǔn)備填充PPT的數(shù)據(jù),我這里用的是豆瓣電影數(shù)據(jù),共有25條電影信息,包含title
,director
,date
,country
,types
共5個(gè)字段,存儲(chǔ)方式為Excel
。數(shù)據(jù)預(yù)覽如下:
另外,由于PPT還需要批量插入圖片,因此我這里也準(zhǔn)備了25張電影海報(bào)圖片,存放在文件夾movie_pic
中。
PPT模板
我們首先需要新建一個(gè)PPT模板,這個(gè)操作比較簡(jiǎn)單,直接進(jìn)入到PPT母版視圖,然后選擇模板中第一張幻燈片的布局,依次插入電影名稱、圖片、類型、主演和導(dǎo)演、年份和國(guó)家6個(gè)占位符,其中除了圖片其他都是內(nèi)容占位符。這里一定要注意插入的順序,后面代碼也是根據(jù)占位符順序來(lái)進(jìn)行內(nèi)容填充。為了美化PPT,我們可以個(gè)性化添加LOGO,背景圖片,設(shè)置字體顏色大小等等。
實(shí)戰(zhàn)
導(dǎo)入相關(guān)模塊
# 讀取圖片文件 import os # 讀取Excel數(shù)據(jù) import pandas as pd # 操作PPT from pptx import Presentation
讀取電影數(shù)據(jù)
用pandas
讀取excel
數(shù)據(jù),并將數(shù)據(jù)轉(zhuǎn)為字典格式。
#讀取電影數(shù)據(jù) df = pd.read_excel(r".\ppt素材\top250.xlsx") data = df.to_dict('records') print(data)
讀取PPT模板插入數(shù)據(jù)
用Presentation()
方法讀取PPT模板,然后遍歷所有電影數(shù)據(jù)(25個(gè)字典),選擇母版樣式中的第一張幻燈片即layout[0]
,接著遍歷幻燈片中的所有占位符,這里用到enumerate()
獲取站位符的序號(hào)。將每個(gè)字典中的值插入到對(duì)應(yīng)的占位符中,最后用save()
方法保存新生成的PPT。
# 讀取母版文件構(gòu)建PPT的對(duì)象 my_ppt = Presentation(r".\ppt素材\ppt模板.pptx") # 獲取母版所有幻燈片布局 layout = my_ppt.slide_layouts # 遍歷所有電影數(shù)據(jù) for x in data: #print(x) #選擇模板中第一個(gè)幻燈片的布局并創(chuàng)建新幻燈片 slide = my_ppt.slides.add_slide(layout[0]) #當(dāng)前幻燈片中所有的占位符 placeholders = slide.shapes.placeholders for i,pl in enumerate(placeholders): if i == 0: pl.text = x["title"] elif i == 2: pl.text = x["types"] elif i == 3: pl.text = x["director"] elif i == 4: pl.text = str(x["date"]) elif i == 5: pl.text = x["country"] my_ppt.save("result.pptx")
由于圖片是單獨(dú)存放在文件夾movie_pic
中,我們需要os.path.join()
方法拼接每張圖片的完整路徑,然后用insert_picture()
方法將圖片插入到PPT中。
# 電影海報(bào)存儲(chǔ)路徑 images = r".\ppt素材\movie_pic" # 遍歷所有電影數(shù)據(jù) for x in data: slide = my_ppt.slides.add_slide(layout[0]) placeholders = slide.shapes.placeholders for i,pl in enumerate(placeholders): if i == 0: pl.text = x["title"] elif i == 1: img_path = os.path.join(images,f'{x["title"]}.jpg') print(img_path) pl.insert_picture(img_path)
以上就是Python讀取Excel數(shù)據(jù)實(shí)現(xiàn)批量生成PPT的詳細(xì)內(nèi)容,更多關(guān)于Python生成PPT的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
python 根據(jù)時(shí)間來(lái)生成唯一的字符串方法
今天小編就為大家分享一篇python 根據(jù)時(shí)間來(lái)生成唯一的字符串方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來(lái)看看吧2019-01-01- Python由荷蘭數(shù)學(xué)和計(jì)算機(jī)科學(xué)研究學(xué)會(huì)的Guido van Rossum 于1990 年代初設(shè)計(jì),作為一門叫做ABC語(yǔ)言的替代品。 Python提供了高效的高級(jí)數(shù)據(jù)結(jié)構(gòu),還能簡(jiǎn)單有效地面向?qū)ο缶幊?/div> 2021-10-10
Python Numpy庫(kù)datetime類型的處理詳解
這篇文章主要介紹了Python Numpy庫(kù)datetime類型的處理詳解,Python中自帶的處理時(shí)間的模塊就有time 、datetime、calendar,另外還有擴(kuò)展的第三方庫(kù),如dateutil等等。。當(dāng)我們用NumPy庫(kù)做數(shù)據(jù)分析時(shí),如何轉(zhuǎn)換時(shí)間呢?需要的朋友可以參考下2019-07-07Python實(shí)現(xiàn)發(fā)送與接收郵件的方法詳解
這篇文章主要介紹了Python實(shí)現(xiàn)發(fā)送與接收郵件的方法,結(jié)合實(shí)例形式分析了Python基于smtplib庫(kù)使用SMTP協(xié)議進(jìn)行郵件發(fā)送及基于poplib庫(kù)使用POP3服務(wù)器接收郵件的相關(guān)操作技巧,需要的朋友可以參考下2018-03-03python中enumerate函數(shù)用法實(shí)例分析
這篇文章主要介紹了python中enumerate函數(shù)用法,以實(shí)例形式較為詳細(xì)的分析了enumerate函數(shù)的功能、定義及使用技巧,需要的朋友可以參考下2015-05-05python爬取之json、pickle與shelve庫(kù)的深入講解
這篇文章主要給大家介紹了關(guān)于python爬取之json、pickle與shelve庫(kù)的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-03-03python3+PyQt5實(shí)現(xiàn)自定義窗口部件Counters
這篇文章主要為大家詳細(xì)介紹了python3+PyQt5實(shí)現(xiàn)自定義窗口部件,Counters自定窗口部件,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-04-04用python寫一個(gè)帶有g(shù)ui界面的密碼生成器
這篇文章主要介紹了用python寫一個(gè)帶有g(shù)ui界面的密碼生成器,幫助大家更好的理解和使用python,感興趣的朋友可以了解下2020-11-11最新評(píng)論