使用python-pptx操作PPT的示例詳解
python對PPT演示文檔讀寫,是通過第三方庫python-pptx實(shí)現(xiàn)的,python-pptx是用于創(chuàng)建和更新 PowerPoint(.pptx)文件的 Python 庫。
關(guān)于PPT演示文檔與幻燈片模板的內(nèi)容不是本文的重點(diǎn),在此略過。
1. PPT基本結(jié)構(gòu)在python-pptx下定義
1.1. 演示文檔結(jié)構(gòu)定義
python-pptx對ppt結(jié)構(gòu)的描述如下圖所示,演示文檔由多個(gè)幻燈片(slide)構(gòu)成,每個(gè)幻燈片由眾多各種形狀(shape)組成。
- Slide:幻燈片,就是演示文稿中每一頁的頁面。
- Shape:形狀,在每頁幻燈片內(nèi)插入的方框,可以是形狀,也可以是文本框、圖片、表格等等。
- Run:文字塊,一般為較少字符。
- Paragraph:段落,通常有序號(hào)?、1.等。

圖示演示文檔,如下圖所示,由3頁幻燈片(slide)構(gòu)成,其中,第三頁幻燈片中的形狀(shape)分別是“標(biāo)題 1”(Title 1)和“圖片”(Picture Placeholder 2)組成。

1.2. 自定義幻燈片母版
使用程序生成演示文檔,最好先自定義幻燈片母版,如下圖所示,定義4頁模板(slide_layouts)。

注意:shape名稱在office軟件下,是中文,而程序讀出來的可能是英文!

對于母版內(nèi)容:
Slides_layouts:版式,一個(gè)幻燈片母版由多個(gè)版式組成,索引從0開始。
slide_layouts[]傳入0表示獲取的是第一個(gè)版式,傳入1表示獲取的是第二個(gè)版式
Placeholder:占位符:存在PPT母版里面的幻燈片的某一部件:Placeholder
2. python-pptx操作PPT實(shí)踐
2.1. 安裝python-pptx
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple python-pptx
2.2. 讀取PPT演示文檔
from pptx import Presentation
# 打開演示文檔
prs = Presentation('加油站全流程診斷大數(shù)據(jù)系統(tǒng).pptx')
for slide in prs.slides:
print(slide)
# 寫入新文件中
prs.save('test.pptx')
# 獲取某一頁Slide中的內(nèi)容
for i, slide in enumerate(prs.slides):
if i == 3:
for shape in slide.shapes:
if shape.has_text_frame:
text_frame = shape.text_frame
print(text_frame.text)
2.3. 基于模板創(chuàng)建新的演示文檔
這里所說模板仍然是pptx文件,不是PPT的模板(potx),python-pptx無法讀取potx模板。也是說,使用僅有一頁,并且無內(nèi)容的空演示文檔,內(nèi)含自定義幻燈片母版,如前面所述的母版樣例。
創(chuàng)建新演示文檔過程如下:
- 首先,修改首頁內(nèi)容,例如主題和副主題
- 接著,按實(shí)際要求,使用具體模板,也就是slide_layouts
代碼過程如下:
from pptx import Presentation
from PIL import Image
im=Image.open('d:\\02資料\\AI無感加油.png')
# 修改首頁
prs= Presentation('template_1.pptx')
slide = prs.slides[0]
title = ['油站全流程診斷輸出測試頁',
'測試頁副標(biāo)題']
for i, shape in enumerate(slide.shapes):
if shape.has_text_frame:
text_frame = shape.text_frame
text_frame.text = title[i]
# 插入內(nèi)容測試
slide = prs.slides.add_slide(prs.slide_layouts[1]) # 用第一個(gè)母版生成一頁ppt
for shape in slide.placeholders: # 獲取這一頁所有的占位符
phf = shape.placeholder_format
print(f'{phf.idx}--{shape.name}--{phf.type}')
print('shape name ', shape.name)
if shape.name == 'Title 1':
shape.text = f'目標(biāo)' #在標(biāo)題占位符中填寫“目標(biāo)”
else:
shape.text = f'內(nèi)容' #在其他占位符中填寫“內(nèi)容”
# 插入圖片測試
im.save('tmp.png') #從外部(數(shù)據(jù)庫)讀取的圖片,臨時(shí)存儲(chǔ)
slide = prs.slides.add_slide(prs.slide_layouts[2]) # 用第一個(gè)母版生成一頁ppt
for shape in slide.placeholders: # 獲取這一頁所有的占位符
phf = shape.placeholder_format
print(f'{phf.idx}--{shape.name}--{phf.type}')
print('shape name ', shape.name)
if shape.name == 'Title 1':
shape.text = f'插入圖片測試' #在標(biāo)題占位符中填寫“目標(biāo)”
else:
shape.insert_picture('tmp.png') #在其他占位符中填寫“圖片”
prs.save('向占位符內(nèi)填寫內(nèi)容_1.pptx')
附加內(nèi)容:列出對象屬性。
for i, shape in enumerate(slide.shapes):
print('對象類型', shape.shape_type)
print('對象屬性列表', dir(shape))
shape部分屬性列表:
- ‘has_chart’,
- ‘has_table’,
- ‘has_text_frame’,
- ‘height’,
- ‘is_placeholder’,
- ‘name’,
- ‘part’,
- ‘placeholder_format’,
- ‘shape_id’,
- ‘shape_type’,
- ‘text’,
- ‘text_frame’,
- ‘top’,
- ‘width’
3. 小結(jié)
對于數(shù)據(jù)分析結(jié)果規(guī)范化輸出,python-pptx功能基本滿足,使用條件是精通PPT,設(shè)計(jì)出合適的母版,供程序交互使用。
以上就是使用python-pptx操作PPT的示例詳解的詳細(xì)內(nèi)容,更多關(guān)于python-pptx操作PPT的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
python接口自動(dòng)化框架實(shí)戰(zhàn)
這篇文章主要介紹了python接口自動(dòng)化框架實(shí)戰(zhàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-12-12
TensorFlow實(shí)現(xiàn)簡單的CNN的方法
這篇文章主要介紹了TensorFlow實(shí)現(xiàn)簡單的CNN的方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-07-07
基于Django的Admin后臺(tái)實(shí)現(xiàn)定制簡單監(jiān)控頁
Django自帶的后臺(tái)管理是Django明顯特色之一,可以讓我們快速便捷管理數(shù)據(jù)。后臺(tái)管理可以在各個(gè)app的admin.py文件中進(jìn)行控制。本文將主要介紹如何利用Admin后臺(tái)實(shí)現(xiàn)監(jiān)控頁的定制,快來和小編一起學(xué)習(xí)一下吧2021-12-12
Flask 讓jsonify返回的json串支持中文顯示的方法
下面小編就為大家分享一篇Flask 讓jsonify返回的json串支持中文顯示的方法,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-03-03
Python實(shí)現(xiàn)批量設(shè)置圖片背景為透明
我們?nèi)粘I钪兄谱鱌PT等教學(xué)資源時(shí),需要批量去除圖片背景,就可以使用 Python 的 rembg 庫,下面我們就來看看如何操作rembg實(shí)現(xiàn)批量設(shè)置圖片背景為透明吧2024-11-11
淺談tf.train.Saver()與tf.train.import_meta_graph的要點(diǎn)
這篇文章主要介紹了淺談tf.train.Saver() 與tf.train.import_meta_graph的要點(diǎn),具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-05-05
Python extract及contains方法代碼實(shí)例
這篇文章主要介紹了Python extract及contains方法代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-09-09

