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