用Python玩轉PPT!

2020-09-27   AI科技大本營

原標題:用Python玩轉PPT!

作者| 陳熹

來源 | 早起Python

今天本文將基於第三方庫pptx,詳細講解如何使用Python操作Office全家桶最後一位——PPT。

安裝

pptx是一個非標準庫,需要在命令行中安裝

pip install python-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文件

from pptx import Presentation# 這裡給出需要打開的文件路徑file_path = r'...'pptx = Presentation(file_path)

2. 獲取幻燈片頁

用pptx.slides可以獲得一個列表,包括所有的幻燈片頁slide 對象。

forslide inpptx.slides: print(slide)

3. 獲取形狀

只要熟悉了類似 Excel 和 Word 的多級結構, PPT 的結構就很好理解了。每一個幻燈片頁都有一個或者多個形狀shape。

forslide inpptx.slides: forshape inslide.shapes: print(shape)

4. 獲取文本框內容

要獲取文字內容,很容易就聯繫到文字在形狀 shape 的下級結構了 從 Word 中的學習我們也可以推知,文字的承載單位是 段落 paragraph和文字塊 run。

很自然可以想到用下列的代碼獲取文字。

forslide inpptx.slides: forshape inslide.shapes: forparagraph inshape.paragraphs: print(paragraph.text)

或者

forslide inpptx.slides: forshape inslide.shapes: forparagraph inshape.paragraphs: forrun inparagraph.runs: print(run.text)

但這裡出現了一個問題:每個形狀里一定有文字嗎?

從上圖可以看到,藍色橢圓的形狀里是沒有任何文字的,中間的大虛線框有文字。

一個形狀中有沒有文字,關鍵就在於它有沒有包含文本框text_frame,下面是與文本框有關的操作:

  • shape.has_text_frame 判斷形狀中是否有文字框
  • shape.text_frame 獲取文字內容

在PPT中,文字框才是文字的載體,因此獲取文字的代碼如下:

forslide inpptx.slides: forshape inslide.shapes: ifshape.has_text_frame: text_frame = shape.text_frame print(text_frame.text)

到這裡,我們需要對先前對 PPT 結構的認識進行修正:

5. 獲取段落和文字塊

每一個文本框都可以看成是一個小的 Word 文件,裡面有段落和文字塊兩級結構:

forslide inpptx.slides: forshape inslide.shapes: ifshape.has_text_frame: text_frame = shape.text_frame forparagraph intext_frame.paragraphs: forrun inparagraph.runs: print(run.text)

寫入 PPT

創建全新 PPT 的代碼可以類比創建 Word 文件的代碼,實例化的過程中不給予具體路徑則為創建空白文件。

1. 創建幻燈片頁

其中占位符編號是區分占位符的依據,也是寫入內容的依據。

2. 往占位符填寫內容

指定占位符編號就可以在具體位置寫入特定內容。

slide.placeholders[占位符編號].text = '...'

修改 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:字體大小

但有一個地方需要加以區別:在python-pptx中,使用文字樣式方法是基於段落,也就是paragraph.font.xxxx, 而在python-docx中,使用文字樣式方法是基於文字塊。

以就是對 python-pptx模塊操作PPT的常見方法總結,處理日常辦公絕對沒有問題,更多詳細的代碼可以查閱官方文檔。

學完了這篇Python操作PPT之後,有關Python操作Word、Excel、PPT、PDF的基礎就全部講解完畢,之後我們會繼續更新使用這些工具實現自動化辦公的案例,如果你還不知道具體該如何應用,下面這些案例可能會有所幫助: