帶你用Python玩轉PPT
作者?|?陳熹
來源 |?早起Python(ID:zaoqi-python)
頭圖 |? CSDN?下載自東方IC
導讀
大家好,今天依舊是Python辦公自動化基礎系列,在之前我們分別詳細講解了
今天本文將基於第三方庫pptx,詳細講解如何使用Python操作Office全家桶最後一位——PPT。
安裝
pptx是一個非標準庫,需要在命令行中安裝
要注意,安裝的時候是python-pptx,而實際調用時均為pptx。這裡和docx模塊相同。
前置知識
1、基本結構
再看一下ppt結構組成,會較word複雜許多。當然這也跟ppt的高度自定義拓展性有關
簡單來說,一個PPT文件為presentation,基本的結構為展示文件presentation-幻燈片頁slide-形狀shape組成,形狀就需要區分開,是包含文本的形狀還是不包含文本的形狀(純圖片等)。
如果是包含文本的形狀,則可以獲取內部的文本框,一個文本框又可以看作是一個小的word文檔,包含段落paragraph - 文字塊run
現在對Office三件套的結構組成做一個小總結
2、模板和佔位符
如上圖所示,通過幻燈片母版我們可以預設好各種各樣的版式,後面新建幻燈片的時候只需要點擊版式就可以一鍵生成所需的基本格式。
接著說說佔位符Placeholder
佔位符已經完成了樣式設置,包括字體、字型大小、顏色等等,在特定佔位符內輸入文字可直接轉化為特定的樣式
3、創建 PPT 文件的基本思路
創建一個 PPT
從幻燈片母版中確定一個版式
在不同的佔位符中填寫不同的內容
添加圖片、表格等額外內容
對樣式進行修改
Python讀取PPT
1、打開PPT文件
2、獲取幻燈片頁
用pptx.slides可以獲得一個列表,包括所有的幻燈片頁slide 對象
3、獲取形狀
只要熟悉了類似 Excel 和 Word 的多級結構, PPT 的結構就很好理解了。每一個幻燈片頁都有一個或者多個形狀shape
4、獲取文本框內容
要獲取文字內容,很容易就聯繫到文字在形狀 shape 的下級結構了從 Word 中的學習我們也可以推知,文字的承載單位是段落 paragraph和文字塊 run
很自然可以想到用下列的代碼獲取文字
或者
但這裡出現了一個問題:每個形狀里一定有文字嗎?
從上圖可以看到,藍色橢圓的形狀里是沒有任何文字的,中間的大虛線框有文字
一個形狀中有沒有文字,關鍵就在於它有沒有包含文本框text_frame,下面是與文本框有關的操作:
shape.has_text_frame判斷形狀中是否有文字框
shape.text_frame獲取文字內容
在PPT中,文字框才是文字的載體,因此獲取文字的代碼如下:
到這裡,我們需要對先前對 PPT 結構的認識進行修正:
5、獲取段落和文字塊
每一個文本框都可以看成是一個小的 Word 文件,裡面有段落和文字塊兩級結構:
寫入 PPT
創建全新 PPT 的代碼可以類比創建 Word 文件的代碼,實例化的過程中不給予具體路徑則為創建空白文件
1、創建幻燈片頁
其中佔位符編號是區分佔位符的依據,也是寫入內容的依據
2、往佔位符填寫內容
指定佔位符編號就可以在具體位置寫入特定內容
修改 PPT 樣式
1、段落樣式修改
可以同python-docx模塊對段落樣式的導入進行類比
具體的方法上二者也有很多相似:
.add_run():添加新的文字塊
.line_spacing:段內行間距
.runs :段落內的所有文字塊
.space_after :段後距
.space_before :段前距
2、文字樣式修改
文字樣式方法和 Word 中的使用是相同的:
.font.name :字體名稱
.font.bold :是否加粗
.font.italic :是否斜體
.font.color :字體顏色
.font.size:字體大小