Python操作PPT實現自動查找替換

前言

本文的文字及圖片來源於網絡,僅供學習、交流使用,不具有任何商業用途,版權歸原作者所有,如有問題請及時聯繫我們以作處理。

作者:多巴胺愛學習

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之類的,你找工作的時候可以寫在簡歷上。工作中真碰到坑了,也可以咬咬牙自己去填。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章