利用Python自動(dòng)生成PPT的示例詳解
在日常工作中,PPT制作是常見的工作,如果制作創(chuàng)意類PPT,則無(wú)法通過自動(dòng)化的形式生成,因?yàn)閯?chuàng)意本身具有隨機(jī)性,而自動(dòng)化解決的是重復(fù)性工作,兩者有所沖突。
python-pptx是python處理PPT的一個(gè)庫(kù),注重的是讀和寫,無(wú)法導(dǎo)出,沒有渲染功能。

廢話不多說,第一步,安裝python-pptx庫(kù):
pip3 install -i https://pypi.doubanio.com/simple/ python-pptx
ppt里面處理的主要對(duì)象一般為文本框,表格,圖片。
每一頁(yè)的ppt為一個(gè)slide
from pptx import Presentation, util
from pptx.util import Pt,Cm
from pptx.shapes.picture import Picture
#實(shí)例化一個(gè)ppt對(duì)象
ppt = Presentation("./test.pptx")
slide = ppt.slides[0] #第幾頁(yè)然后遍歷查看這一頁(yè)ppt中都包含哪些對(duì)象:
def rander_template(slide):
for shape in slide.shapes:
if shape.has_text_frame == True:
print("==========================文本框=============================")
print("段落長(zhǎng)度:",len(shape.text_frame.paragraphs))
for paragraph in shape.text_frame.paragraphs:
# 拼接文字
print("段落包含字段:",len(paragraph.runs))
print(''.join(run.text for run in paragraph.runs))
for i in range(len(paragraph.runs)):
print("run"+str(i)+":"+paragraph.runs[i].text)
print(shape.text_frame.paragraphs[0].runs[0].text)
shape.text_frame.paragraphs[0].runs[0].text = "規(guī)則是自由的第一要義"
elif shape.has_table == True:
print("==========================表格==============================")
one_table_data = []
for row in shape.table.rows: # 讀每行
row_data = []
for cell in row.cells: # 讀一行中的所有單元格
cell.text = cell.text if cell.text != "" else "未填寫"
c = cell.text
row_data.append(c)
one_table_data.append(row_data) # 把每一行存入表
# 用二維列表輸出表格行和列的數(shù)據(jù)
print(one_table_data)
print("第一個(gè)單元格內(nèi)容:",shape.table.rows[0].cells[0].text)
elif isinstance(shape,Picture):
print("==========================圖片==============================")
index = 0
with open(f'{index}.jpg','wb') as f:
f.write(shape.image.blob)
index += 1
文本框?qū)ο蟆総ext_frame】:
shape.has_text_frame查看是否有文本框?qū)ο螅械脑挷榭淳唧w有幾個(gè)段落【len(shape.text_frame.paragraphs)】,每個(gè)段落又有多少個(gè)run對(duì)象【len(paragraph.runs)】
注意:修改run對(duì)象的時(shí)候,修改run[0],后面的值都會(huì)被覆蓋。
表格對(duì)象【table】:
table對(duì)象還是按照行列值來定位劃分的,eg:table.rows[2]cells[3].text代表第三行第四列的值
圖片對(duì)象【Picture】:
插入圖片需要固定圖片的位置,比如:

def insert_pic(slide):
#需要用到pptx庫(kù)的util方法
img_path = './blue.png' # 圖片路徑
# 設(shè)置圖片的位置和大小
left = util.Cm(8.04)
top = util.Cm(9.93)
width = util.Cm(15.07)
height = util.Cm(4.06)
# 在頁(yè)面中插入圖片
slide.shapes.add_picture(img_path, left, top, width, height)
全部代碼:
from pptx import Presentation, util
from pptx.util import Pt,Cm
from pptx.shapes.picture import Picture
ppt = Presentation("./test.pptx")
def rander_template(slide):
for shape in slide.shapes:
if shape.has_text_frame == True:
print("==========================文本框=============================")
print("段落長(zhǎng)度:",len(shape.text_frame.paragraphs))
for paragraph in shape.text_frame.paragraphs:
# 拼接文字
print("段落包含字段:",len(paragraph.runs))
print(''.join(run.text for run in paragraph.runs))
for i in range(len(paragraph.runs)):
print("run"+str(i)+":"+paragraph.runs[i].text)
print(shape.text_frame.paragraphs[0].runs[0].text)
shape.text_frame.paragraphs[0].runs[0].text = "規(guī)則是自由的第一要義"
elif shape.has_table == True:
print("==========================表格==============================")
one_table_data = []
for row in shape.table.rows: # 讀每行
row_data = []
for cell in row.cells: # 讀一行中的所有單元格
cell.text = cell.text if cell.text != "" else "未填寫"
c = cell.text
row_data.append(c)
one_table_data.append(row_data) # 把每一行存入表
# 用二維列表輸出表格行和列的數(shù)據(jù)
print(one_table_data)
print("第一個(gè)單元格內(nèi)容:",shape.table.rows[0].cells[0].text)
elif isinstance(shape,Picture):
print("==========================圖片==============================")
index = 0
with open(f'{index}.jpg','wb') as f:
f.write(shape.image.blob)
index += 1
def insert_pic(slide):
img_path = './blue.png' # 圖片路徑
# 設(shè)置圖片的位置和大小
left = util.Cm(8.04)
top = util.Cm(9.93)
width = util.Cm(15.07)
height = util.Cm(4.06)
# 在頁(yè)面中插入圖片
slide.shapes.add_picture(img_path, left, top, width, height)
if __name__ == "__main__":
slide = ppt.slides[0] #第幾頁(yè)
rander_template(slide)
insert_pic(slide)
ppt.save('new.pptx') # 保存為文件初始ppt:

生成ppt:

到此這篇關(guān)于利用Python自動(dòng)生成PPT的示例詳解的文章就介紹到這了,更多相關(guān)Python自動(dòng)生成PPT內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
springboot aop方式實(shí)現(xiàn)接口入?yún)⑿r?yàn)的示例代碼
在實(shí)際開發(fā)項(xiàng)目中,我們常常需要對(duì)接口入?yún)⑦M(jìn)行校驗(yàn),本文主要介紹了springboot aop方式實(shí)現(xiàn)接口入?yún)⑿r?yàn)的示例代碼,具有一定的參考價(jià)值,感興趣的可以了解一下2023-08-08
基于本地知識(shí)的問答機(jī)器人langchain-ChatGLM 大語(yǔ)言模型實(shí)現(xiàn)方法詳解
這篇文章主要介紹了基于本地知識(shí)的問答機(jī)器人langchain-ChatGLM 大語(yǔ)言模型實(shí)現(xiàn)方法,結(jié)合具體實(shí)例形式詳細(xì)分析了langchain-ChatGLM的功能、原理、部署方法與操作注意事項(xiàng),需要的朋友可以參考下2023-07-07
python 使用tkinter與messagebox寫界面和彈窗
這篇文章主要介紹了python 使用tkinter與messagebox寫界面和彈窗,文章內(nèi)容詳細(xì),具有一的的參考價(jià)值,需要的小伙伴可以參考一下2022-03-03
celery在python爬蟲中定時(shí)操作實(shí)例講解
在本篇文章里小編給大家整理了一篇關(guān)于celery在python爬蟲中定時(shí)操作實(shí)例講解內(nèi)容,需要的朋友們可以參考下。2020-11-11
淺談python連續(xù)賦值可能引發(fā)的錯(cuò)誤
今天小編就為大家分享一篇淺談python連續(xù)賦值可能引發(fā)的錯(cuò)誤,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-11-11
python 數(shù)據(jù)類(dataclass)的具體使用
本文主要介紹了python 數(shù)據(jù)類(dataclass)的具體使用,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-03-03
Python開發(fā)之Nginx+uWSGI+virtualenv多項(xiàng)目部署教程
這篇文章主要介紹了Python系列之-Nginx+uWSGI+virtualenv多項(xiàng)目部署教程,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-05-05
Python學(xué)習(xí)之Django的管理界面代碼示例
這篇文章主要介紹了Python學(xué)習(xí)之Django的管理界面代碼示例,分享了相關(guān)代碼示例,小編覺得還是挺不錯(cuò)的,具有一定借鑒價(jià)值,需要的朋友可以參考下2018-02-02

