大家好,又到了Python辦公自動化系列。本文將講解如何將文字從PPT中提取出來並寫入Word,主要將涉及如何使用python-pptx
和python-docx
交互操作word和ppt文件!
本文依舊來源於真實的辦公自動化需求!
一、需求說明
img
有一份如圖所示的ppt,包含了Python的介紹。現在需要將PPT中的文字都提取出來並寫入Word中,如下圖
img
二、涉及知識
代碼實際上非常簡單,基於python-pptx
和python-docx
兩個模塊即可,核心代碼只有6行。但需要先熟悉PPT和Word兩種文件的格式,可通過下面的圖解對Word結構有個直觀認識
img
不考慮表格圖片等情況,一個純文字組成的Word文檔由文檔document-段落paragraph-文字塊run****三級結構組成。再看一下ppt結構組成,會較Word復雜許多。當然這也跟PPT的高度自定義拓展性有關
img
簡單來說,一個PPT文件為presentation,基本的結構為展示文件presentation-幻燈片頁slide-形狀shape組成,形狀就需要區分開,是包含文本的形狀還是不包含文本的形狀(純圖片等)。如果是包含文本的形狀,則可以獲取內部的文本框,一個文本框又可以看作是一個小的word文檔,包含段落paragraph-文字塊run
有了以上的知識鋪墊就可以寫代碼了。
三、Python實現
首先導入需要的模塊
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)
小結
這是經過一定改編的真實案例,可見Python自動化辦公確實能夠幫助我們解放自己的雙手,不過在寫自動化腳本之前也要掌握原理,明確思路再進行!最后還是希望大家能夠理解Python辦公自動化的一個核心就是批量操作-解放雙手
,讓復雜的工作自動化!