Python 自动化教程(3) : 自动生成PPT文件 Part 1 (干货)
?系列教程:
Python 自動化教程(1) 概述,第一篇 Excel自動化
Python 自動化教程(2) : Excel自動化:使用pandas庫
Python 自動化教程(3) : 自動生成PPT文件 Part 1
Python 自動化教程(4) : 自動生成PPT文件 Part 2
Python 自動化教程(5) : 自動生成Word文件
Python 自動化教程(6) : PDF文件處理
四、自動生成PPT文件?
自動化辦公中,經(jīng)常要批量處理office文件。
比如:每月花很多時間寫PPT,能自動生成PPT,就好了。
本文的源碼和文件下載請點這里
1、office庫簡介
? ? 本人用 python 寫了一個 office庫,用于辦公自動化,功能是很強的,?包括:PPT自動生成、PPT轉(zhuǎn)長圖、PPT帶語音播放、Word自動生成、Excel數(shù)據(jù)處理、圖片處理、視頻處理、office文檔轉(zhuǎn)為PDF、PDF加解密、加水印等等,都是實用的干貨。
使用方法極簡,大多數(shù)功能只需一行、兩行代碼。
1.1、一行代碼自動生成PPT的實戰(zhàn)效果
import office # 以 template.pptx 為模板,創(chuàng)建 output.pptx 文件, 填入datafile.xlsx文件數(shù)據(jù), 保存 office.open_file("output.pptx", "template.pptx").fill('datafile.xlsx').save()代碼簡單,但生成的PPT效果卻是不簡單的。如圖:
?
本教程將office庫源碼、例程、使用方法分享給大家。
1.2、使用PIP?安裝office庫:
請在命令行,通過PIP安裝:
pip install jojo-officeoffice庫的安裝名稱是 jojo-office
使用時, import office?即可。
import officeoffice庫依賴庫包括:python-docx, openpyxl, python-pptx, PyPDF4,?reportlab, playsound等,?安裝時將自動安裝完成。
如需要導(dǎo)入導(dǎo)出DataFrame,?則依賴 pandas 庫,請按需要安裝
pip install pandas -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.comoffice庫只支持新版的office文件(擴展名為 .docx, .xlsx, .pptx),不支持office2003以前的老版本office文件(擴展名為 .doc, .xls, .ppt)。
2、自動生成PPT文件的原理
自動生成PowerPoint文件的方法是:首先寫一個模板PowerPoint文件,復(fù)制模板創(chuàng)建新文件,再填入數(shù)據(jù)。?填入不同的數(shù)據(jù),則產(chǎn)生不同的PPT文件,從而實現(xiàn)批量生成,?比如:使用每個月的Excel報表文件數(shù)據(jù),生成當(dāng)月的PPT。
模板PPT文件就是一個普通的PPT文件,內(nèi)容和格式按需要寫。只不過在要填入數(shù)據(jù)的地方,寫入變量即可。變量的寫法如下:
比如:模板PowerPoint文件 template.pptx, ?幻燈片中的文字內(nèi)容如下:
其中:大括號 { xxx } 包含文字叫作變量。{name}、{age}就是變量。
生成PPT的過程就是填入數(shù)據(jù),將變量將替換為相應(yīng)的值。name變量將替換為name的值。age變量將替換為age的值。
注意:要使用英文的大括號,不要使用全角字符的大括號,否則變量將無法識別。
3、將Excel文件作為數(shù)據(jù)源,填入PowerPoint模板文件
3.1 文字
Excel文件是 datafile.xlsx,其 Sheet1工作表B2單元格內(nèi)容是 'Peter', C2格內(nèi)容是 18。
模板PowerPoint文件 template1.pptx 寫成這樣:
變量 {Sheet1!B2} 指明 數(shù)據(jù)來自 Excel文件的 Sheet1 工作表的 B2 單元格。
變量 {Sheet1!C2} 指明 數(shù)據(jù)來自 Excel文件的 Sheet1 工作表的 C2 單元格。
生成PPT的python程序如下:
import office# 以 template1.pptx 為模板,創(chuàng)建 output.pptx 新文件 # 如果 output.pptx 文件已存在,則將覆蓋原文件 ppt = office.open_file("output.pptx", template="template1.pptx")# 從 datafile.xlsx 文件中取數(shù)據(jù), 填入, 保存 ppt.fill('datafile.xlsx').save()上述程序也可以連寫為一行,如:
office.open_file("output.pptx", "template1.pptx").fill('datafile.xlsx').save()程序運行后,生成 output.pptx 文件, 其內(nèi)容如下:
?小結(jié):
?寫模版文件就是在適當(dāng)?shù)奈恢脤懭胱兞俊W兞恳?{?號開頭,}?號結(jié)尾。
?指向Excel數(shù)據(jù)的變量名就是?工作表及單元格的引用地址,?如: {Sheet1!B2}?。
生成PPT就是填入數(shù)據(jù)。同一模板生成不同的PPT,更換數(shù)據(jù)即可。
填入數(shù)據(jù)時,格式(包括字體、大小、位置、顏色)都沒有變。
模版PPT文件可以包含多張幻燈片,每一頁上都可寫入變量,數(shù)量不限。
3.2 表格
在模板PPT中創(chuàng)建表格,表格的每一列定義一個變量,可以把多行數(shù)據(jù)填入PPT表格中。
datafile.xlsx 的 Sheet1工作表有一個表格
模板文件 template2.pptx 中畫了一個表格 4行 X 2列,每一列的第一行寫上變量,寫成這樣:
?python程序如下:
import officeppt = office.open_file("output.pptx", template="template2.pptx")# 從 datafile.xlsx 文件中取數(shù)據(jù), 填入, 保存 ppt.fill('datafile.xlsx').save()程序運行后,生成 output.pptx 文件, 其內(nèi)容如下:
?可見,Excel的表格數(shù)據(jù),填入到PPT表格中了。
注:填入表格的數(shù)據(jù)行數(shù),取決于PPT模板中表格的行數(shù)。如果Excel表格行數(shù)大于PPT表格行數(shù),則后面的數(shù)據(jù)不會被填入。
3.3 圖表
在PPT模板中創(chuàng)建圖表。每個圖表有一個數(shù)據(jù)表,將圖表數(shù)據(jù)表每一列定義為一個變量。生成PPT時,數(shù)據(jù)將填入PPT圖表的數(shù)據(jù)表,則PPT圖表將更新。
在PowerPoint程序中打開模板文件 template3.pptx,創(chuàng)建一個直方圖。
?在PowerPoint程序中, 右鍵單擊圖表,選擇菜單:“編輯數(shù)據(jù)",? 則可以看到圖表的數(shù)據(jù)表。
?修改數(shù)據(jù)表的第一行,每一列的第一行修改為變量,例如:{商品銷售1!B1} 表示本列的數(shù)據(jù)來自?Excel數(shù)據(jù)文件的 商品銷售工作表 的 B列。?修改后數(shù)據(jù)表如下圖:
python程序如下:
程序運行后,生成 output.pptx 文件, 其內(nèi)容如下:
?可見,?PPT圖表已更新。
?在PowerPoint中打開剛才生成的文件 output.pptx,右鍵單擊圖表,選擇菜單:“編輯數(shù)據(jù)",?
則可以看到PPT圖表的數(shù)據(jù)表已經(jīng)被更改為Excel文件的相應(yīng)數(shù)據(jù)表,如下:
事實上, office庫的處理方法,就是更新PPT圖表的數(shù)據(jù)表后, 重建圖表。
注:office庫的圖表功能目前支持2D圖表,不支持3D圖表。因此,模板中的圖表不能是3D圖表類型。
3.4 ?插入圖片、視頻、音頻
如果數(shù)據(jù)是圖片文件名,則可以在PPT中插入該圖片文件。
模板文件 template4.pptx 中畫了一個文本框,填入文字,寫上變量 {@Sheet1!D2},變量名前加上一個 ‘@’字符表明它是一個特殊變量。當(dāng)它是一個圖片文件名時,將插入該圖片文件。模板如圖:
?python程序如下:
import office# 以 template4.pptx 為模板,創(chuàng)建 output.pptx 文件, 填入datafile.xlsx 文件數(shù)據(jù), 保存 office.open_file("output.pptx", "template4.pptx").fill('datafile.xlsx').save()注意: datafile.xlsx 文件 Sheet1!D2?單元格 的值是 "peter.jpg",是一個圖片文件名。?該文件名沒有指明路徑,因此這個圖片文件要放在當(dāng)前目錄下。當(dāng)然,文件名使用絕對路徑則沒有問題。
程序運行后,生成 output.pptx 文件, 其內(nèi)容如下。可見,PPT文檔插入了一張圖片 peter.jpg,?圖片大小和位置與變量所在的文本框一致。
?同理,? .mp3, .mp4?等音頻、視頻文件也可以插入PPT文檔。
3.5?生成PPT綜合報告
將上述?文字、表格、圖表、圖片功能合在一起,可以生成PPT綜合報告了。
數(shù)據(jù)文件在 datafile.xlsx ,?這個文件中有多個工作表:?商品銷售、客戶、庫存、匯總。
模板文件 template5.pptx?是一個典型的PPT報告,有表格、圖表、文字、圖片等。其內(nèi)容如下:
?
python程序如下:
import office# 以 template5.pptx 為模板,創(chuàng)建 report.pptx 文件, 填入datafile.xlsx 文件數(shù)據(jù), 保存 office.open_file("report.pptx", "template5.pptx").fill('datafile.xlsx').save()程序運行后,生成 output.pptx 文件, 其內(nèi)容如下:
??
3.6?將PPT存盤為一張長圖?
一張長圖就是把PPT每一頁變成圖片,連接為一張長圖。
注意:存盤為長圖的功能,需要本機安裝了Microsoft Powerpoint程序或WPS Office
打開pptx文件,存盤為一個jpg文件,即可保存為一張長圖。
python程序如下:
# 打開 report.pptx, 存盤為 一張長圖 (注:存盤文件名為一個jpg文件,就是保存為一張長圖) office.open_file("report.pptx").save("long.jpg")?如果長圖需要加水印,則在調(diào)用save()時加上 watermark?參數(shù),?程序如下:
# 打開 report.pptx, 存盤為 一張長圖 (注:存盤文件名為一個jpg文件,就是保存為一張長圖) office.open_file("report.pptx").save("long.jpg", watermark="商業(yè)秘密,注意保管")一張漂亮的長圖就產(chǎn)生了。
3.6?將PPT存盤為PDF
# 打開 report.pptx, 存盤為PDF, 加水印 office.open_file("report.pptx").save("report.pdf", watermark="商業(yè)秘密,注意保管")存為PDF,save()文件名取名為 .pdf?即可。 watermark是水印文字。
注意:PPTX轉(zhuǎn)PDF的功能,需要本機安裝了Microsoft Powerpoint程序或WPS Office
4、循環(huán)播放PPT,同步播放語音
放PPT,每隔幾秒自動翻頁,播放到最后一頁后跳回第一頁,循環(huán)播放
python程序如下:
# 循環(huán)播放PPT,打開 report.pptx, 播放PPT, 每隔3秒換到下一頁 office.open_file("report.pptx").play(3)程序運行后,將啟動Microsoft Powerpoint程序(或WPS Office),自動進入全屏模式,逐頁顯示PPT,循環(huán)播放。上面的代碼是每隔3秒換一頁。播放過程中,按ESC鍵中斷播放,退出程序。
注意:播放PPT的功能,需要本機安裝了Microsoft Powerpoint程序或WPS Office
如果每一頁的跳轉(zhuǎn)時間不同,可以把間隔時間寫成一個數(shù)組。
office.open_file("report.pptx").play([1, 3, 2, 1])間隔時間數(shù)組?[1, 3, 2, 1]?的含義是:?第一頁停1秒,第二頁停3秒,第三頁停2秒,第四頁停1秒。
如果有更多頁,把數(shù)組寫長即可。
播放PPT時,可以在播放到某個頁面時同步播放語音文件。
# 循環(huán)播放PPT, 在第2頁時,播放語音文件 1.wav office.open_file("report.pptx").play([1,[3, "1.wav"],3,[1, "2.wav"] ])把間隔時間數(shù)組中,需要播放語音的頁面位置寫成?數(shù)組, 形如: [間隔秒數(shù),語音文件名]。
如上,?當(dāng)播放到第二頁時,播放 1.wav,?停留3秒。?當(dāng)播放到第四頁時,播放 2.wav,?停留1秒。?
也可以把播放間隔寫成一個文本文件。?比如: play.txt,內(nèi)容如下:
1 3 1.wav 3 1 2.wav格式為: 每一行表示一頁PPT的播放 間隔秒數(shù) +?空格 +?語音文件名。
則,python程序中,?引用這個文件即可。
office.open_file("report.pptx").play("play.txt")效果與之前用數(shù)組表達的是一樣的。
播放PPT帶語音的應(yīng)用場景:例如: 開展覽會時,自動放PPT+語音。省去解說人員。
小結(jié):
1, office庫提供了強大的PPT生成功能。
2, 寫一個模板PPT文件,編寫變量。填入數(shù)據(jù),即可生成PPT.
3,? 數(shù)據(jù)可以放在Excel文件中。變量為 Excel的 {工作表!單元格} 即可。
4,PPT可以存為長圖。可以帶語音播放。
本文的源碼和文件下載請點這里
續(xù)篇:
office庫還有其他許多功能,下節(jié)課再講。
office庫還在開發(fā)完善中,偶有bug請見諒、或提改進。
有興趣深入研究的,可以看office.py的源碼。
總結(jié)
以上是生活随笔為你收集整理的Python 自动化教程(3) : 自动生成PPT文件 Part 1 (干货)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: oracle的env函数用法,env命令
- 下一篇: python shell怎么调字体大小_