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之類的,你找工作的時候可以寫在簡歷上。工作中真碰到坑了,也可以咬咬牙自己去填。
智能推薦
freemarker + ItextRender 根據模板生成PDF文件
1. 制作模板 2. 獲取模板,并將所獲取的數據加載生成html文件 2. 生成PDF文件 其中由兩個地方需要注意,都是關于獲取文件路徑的問題,由于項目部署的時候是打包成jar包形式,所以在開發過程中時直接安照傳統的獲取方法沒有一點文件,但是當打包后部署,總是出錯。于是參考網上文章,先將文件讀出來到項目的臨時目錄下,然后再按正常方式加載該臨時文件; 還有一個問題至今沒有解決,就是關于生成PDF文件...
電腦空間不夠了?教你一個小秒招快速清理 Docker 占用的磁盤空間!
Docker 很占用空間,每當我們運行容器、拉取鏡像、部署應用、構建自己的鏡像時,我們的磁盤空間會被大量占用。 如果你也被這個問題所困擾,咱們就一起看一下 Docker 是如何使用磁盤空間的,以及如何回收。 docker 占用的空間可以通過下面的命令查看: TYPE 列出了docker 使用磁盤的 4 種類型: Images:所有鏡像占用的空間,包括拉取下來的鏡像,和本地構建的。 Con...
requests實現全自動PPT模板
http://www.1ppt.com/moban/ 可以免費的下載PPT模板,當然如果要人工一個個下,還是挺麻煩的,我們可以利用requests輕松下載 訪問這個主頁,我們可以看到下面的樣式 點每一個PPT模板的圖片,我們可以進入到詳細的信息頁面,翻到下面,我們可以看到對應的下載地址 點擊這個下載的按鈕,我們便可以下載對應的PPT壓縮包 那我們就開始做吧 首先,查看網頁的源代碼,我們可以看到每一...
猜你喜歡
Linux C系統編程-線程互斥鎖(四)
互斥鎖 互斥鎖也是屬于線程之間處理同步互斥方式,有上鎖/解鎖兩種狀態。 互斥鎖函數接口 1)初始化互斥鎖 pthread_mutex_init() man 3 pthread_mutex_init (找不到的情況下首先 sudo apt-get install glibc-doc sudo apt-get install manpages-posix-dev) 動態初始化 int pthread_...
統計學習方法 - 樸素貝葉斯
引入問題:一機器在良好狀態生產合格產品幾率是 90%,在故障狀態生產合格產品幾率是 30%,機器良好的概率是 75%。若一日第一件產品是合格品,那么此日機器良好的概率是多少。 貝葉斯模型 生成模型與判別模型 判別模型,即要判斷這個東西到底是哪一類,也就是要求y,那就用給定的x去預測。 生成模型,是要生成一個模型,那就是誰根據什么生成了模型,誰就是類別y,根據的內容就是x 以上述例子,判斷一個生產出...
styled-components —— React 中的 CSS 最佳實踐
https://zhuanlan.zhihu.com/p/29344146 Styled-components 是目前 React 樣式方案中最受關注的一種,它既具備了 css-in-js 的模塊化與參數化優點,又完全使用CSS的書寫習慣,不會引起額外的學習成本。本文是 styled-components 作者之一 Max Stoiber 所寫,首先總結了前端組件化樣式中的最佳實踐原則,然后在此基...
19.vue中封裝echarts組件
19.vue中封裝echarts組件 1.效果圖 2.echarts組件 3.使用組件 按照組件格式整理好數據格式 傳入組件 home.vue 4.接口返回數據格式...