前言
本文的文字及圖片來源於網絡,僅供學習、交流使用,不具有任何商業用途,版權歸原作者所有,如有問題請及時聯繫我們以作處理。
作者:多巴胺愛學習
PS:如有需要Python學習資料的小夥伴可以加點擊下方鏈接自行獲取http://t.cn/A6Zvjdun
爲什麼要這麼幹
萬事皆有緣由,以下純屬YY,不想看的可以直接忽略。
OCR文字識別已經很流行了,我們做PPT的時候經常會用文字識別軟件來獲得內容(好吧,我經常這麼幹。。。)。OCR軟件在識別文字上的準確性已經比較高了,但是標點符合卻差強人意,逗號、分號、冒號之類的經常會被識別爲半角,這個時候就需要改了。
當然,我們可以用ppt當中的替換功能手工替換。
再當然,我們還可以用ppt的宏功能實現,使用起來更方便。只是這個宏,目前我還沒寫出來,寫出來後再另外分享了。
本次操作環境
操作系統:win10
Python版本:3.7
使用的第三方庫:python-pptx
如果沒有安裝第三方庫的話,需要先安裝下:
- Windows:pip install python-pptx
- Mac:pip3 install python-pptx
PPT科普
PPT是由許多頁組成的,頁叫做Slide;
每一頁又包含了許多組件,像文本框、表格,這些組件叫做Shape。我們做PPT的時候,文字主要就是放在文本框或者表格中的;
文本框中的文字是以段落的形式存在的,段落叫做Paragraph;
表格是由單元格組成的,單元格叫做Cell,單元格中的文字,也是由段落組成的。
如下圖:
代碼實現
代碼實現的原理很簡單,遍歷Slide找Shape;遍歷Shape找Paragraph;遍歷Paragraph找run(run簡單點理解就是文字塊);在run中看看有沒有需要替換的字符,有的話就替換了。
import pptx
fromShao pptx import Presentation
TEXT_NEED_REPLACE = [('概念', 'Concept'), ('企業', 'Enterprise')]#需要替換的內容,數據結構爲“[(被替換內容1,替換內容1),(被替換內容2,替換內容2),……]”
FILE_OPEN = r"c:/python/asoursefiles/00301.pptx"#需要打開的文件地址
FILE_SAVE = r"c:/python/asoursefiles/demo.pptx"#需要保存的文件地址,不建議直接覆蓋原文件,當然你非要覆蓋原文件也攔不住。這裏需要提示的是:需要保存的文件不能是打開的狀態,否則會無法保存。
def replace_text(text_frame):#該函數實現的是文本替換功能
for paragraph in text_frame.paragraphs:
for run in paragraph.runs:
for tt in TEXT_NEED_REPLACE:
if tt[0] in run.text:
run.text = run.text.replace(tt[0], tt[1])
def process_ppt(filename_open, filename_save):
prs = Presentation(filename_open)
for slide in prs.slides:
for shape in slide.shapes:
if shape.has_text_frame:#判斷Shape是否含有文本框
text_frame = shape.text_frame
replace_text(text_frame)#調用replace_text函數實現文本替換
if shape.has_table:#判斷Shape是否含有表格
table = shape.table
for cell in table.iter_cells():#遍歷表格的cell
text_frame = cell.text_frame
replace_text(text_frame))#調用replace_text函數實現文本替換
prs.save(filename_save)#保存
process_ppt(FILE_OPEN, FILE_SAVE)
後記
用Python與ppt、word進行交互是一個比較雞肋的想法,99%的情況下,都是閒的無聊,微軟的office功能已經不要太強大了。
用Python操作excel,相比於office,在個別情況(數據量大,或者需要實現的分析步驟太多,太複雜之類的)下可能具有優勢,但通常情況下也用不到。
對於普通辦公需求,從實用角度來說,學好office比學什麼python,R,matlab,SPSS之類的有用多了。畢竟office的強大,只有你想不到的,沒有它做不到的(安裝包也夠大的,打開之後電腦風扇轉的哇哇哇的響)。
當然,會點Python,matlab之類的,你找工作的時候可以寫在簡歷上。工作中真碰到坑了,也可以咬咬牙自己去填。