轉載請注明:陳熹 [email protected] (簡書号:半為花間酒)
若公衆号内轉載請聯系公衆号:早起Python
本例可以學到的知識點: python-pptx和python-docx互動操作word和ppt檔案
今天将會學習一個實用辦公小技巧:将文字從ppt中提取出來并寫入word
一、需求描述:

有一份如圖所示的ppt,包含了Python的介紹。現在需要将ppt中的文字都提取出來并寫入word中,如下圖:

二、涉及知識
代碼實際上非常簡單,基于python-pptx和python-docx兩個子產品即可,核心代碼隻有6行
但需要先熟悉ppt和word兩種檔案的格式,可通過下面的圖解對word結構有個直覺認識

不考慮表格圖檔等情況,一個純文字組成的word文檔由文檔 document - 段落 paragraph - 文字塊 run三級結構組成
再看一下ppt結構組成,會較word複雜許多。當然這也跟ppt的高度自定義拓展性有關

簡單來說,一個PPT檔案為presentation,基本的結構為展示檔案 presentation - 幻燈片頁 slide - 形狀 shape組成,形狀就需要區分開,是包含文本的形狀還是不包含文本的形狀(純圖檔等)。如果是包含文本的形狀,則可以擷取内部的文本框,一個文本框又可以看作是一個小的word文檔,包含段落 paragraph - 文字塊 run
有了以上的知識鋪墊就可以寫代碼了
三、代碼實作
導入需要的子產品
from pptx import Presentation
from docx import Document
注意,安裝的時候是python-docx和python-pptx,但實際運用都是pptx和docx
兩個子產品的相似點:
安裝名和導入名不同
安裝名為 python-新版本字尾名 導入名為新版本字尾名
導入pptx檔案,建立word檔案
wordfile = Document()
# 給定ppt檔案所在的路徑
filepath = r'xxxxxxxx'
pptx = Presentation(filepath)
周遊ppt,将文字寫入word
# 周遊ppt檔案的所有幻燈片頁
for slide in pptx.slides:
# 周遊幻燈片頁的所有形狀
for shape in slide.shapes:
# 判斷形狀是否含有文本框,如果含有則順序運作代碼
if shape.has_text_frame:
# 擷取文本框
text_frame = shape.text_frame
# 周遊文本框中的所有段落
for paragraph in text_frame.paragraphs:
# 将文本框中的段落文字寫入word中
wordfile.add_paragraph(paragraph.text)
周遊ppt到段落就寫入word,而非周遊到底直到文字塊才寫入,因為段落更符合閱讀習慣,一般周遊到文字塊是需要對特定的字段詞塊進行操作才進行
最後記得儲存word檔案
save_path = r'xxxxxxxx'
wordfile.save(save_path)