在日常向領(lǐng)導(dǎo)匯報(bào)工作的時(shí)候,PPT使用次數(shù)是比較多的,那么,怎么才能提高工作效率,更快的去完成PPT呢?下面,小編就給大家總結(jié)了一些代碼實(shí)例,希望大家以后在工作中能夠遇到。
在日常工作中,PPT制作是常見(jiàn)的工作,那么慢,怎么快速的進(jìn)行制作,確是十分考驗(yàn)人的能力的。
如果我們想要把PPT做的更好看一些,比如去制作創(chuàng)意類PPT,則無(wú)法通過(guò)自動(dòng)化的形式生成,因?yàn)閯?chuàng)意本身具有隨機(jī)性,而自動(dòng)化解決的是重復(fù)性工作,所以兩者就會(huì)產(chǎn)生一定的沖突。
python-pptx是python處理PPT的一個(gè)庫(kù),注重的是讀和寫,無(wú)法導(dǎo)出,沒(méi)有渲染功能,那么,到底該如何使用呢,下面給讀者一步一步的進(jìn)行拆解。
第一步,安裝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ū)ο?,有的話查看具體有幾個(gè)段落【len(shape.text_frame.paragraphs)】,每個(gè)段落又 有多少個(gè)run對(duì)象【len(paragraph.runs)】
注意:修改run對(duì)象的時(shí)候,修改run[0],后面的值都會(huì)被覆蓋。
表格對(duì)象【table】:
table對(duì)象還是按照行列值來(lái)定位劃分的,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)生產(chǎn)PPT的文章就為大家介紹到這里了,希望能給大家?guī)?lái)幫助。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/127545.html
摘要:面向切面編程的目標(biāo)就是分離關(guān)注點(diǎn)。不會(huì)出現(xiàn)數(shù)據(jù)不一致或者數(shù)據(jù)污染。線程不安全就是不提供數(shù)據(jù)訪問(wèn)保護(hù),有可能出現(xiàn)多個(gè)線程先后更改數(shù)據(jù)造成所得到的數(shù)據(jù)是臟數(shù)據(jù)和區(qū)別是的輕量級(jí)實(shí)現(xiàn)非線程安全的實(shí)現(xiàn) spingmvc 和 structs的區(qū)別 我們用struts2時(shí)采用的傳統(tǒng)的配置文件的方式,并沒(méi)有使用傳說(shuō)中的0配置。 spring3 mvc可以認(rèn)為已經(jīng)100%零配置了(除了配置spring ...
摘要:基于云遷移的三個(gè)階段細(xì)分為八個(gè)主要步驟,評(píng)估階段主要包括項(xiàng)目啟動(dòng)現(xiàn)狀梳理以及應(yīng)用系統(tǒng)關(guān)聯(lián)關(guān)系分析三個(gè)步驟,設(shè)計(jì)階段包括云架構(gòu)優(yōu)化設(shè)計(jì)和云遷移方案設(shè)計(jì),實(shí)施階段包括目標(biāo)架構(gòu)遷移演練及實(shí)施和試運(yùn)行三個(gè)步驟。 在云計(jì)算市場(chǎng)規(guī)模不斷擴(kuò)大的大背景下,云遷移的需求越來(lái)越大且面臨挑戰(zhàn)。云遷移不是一個(gè)遷移軟件工具,而是一種服務(wù)。前IBM資深架構(gòu)師姜亞杰從云遷移的三個(gè)階段、四個(gè)維度到八個(gè)步驟的方法,簡(jiǎn)述...
摘要:上班太忙沒(méi)時(shí)間自己學(xué)習(xí)很多人認(rèn)為自己沒(méi)有成為技術(shù)大牛并不是自己不聰明,也不是自己不努力,而是中國(guó)的這個(gè)環(huán)境下,技術(shù)人員加班都太多了,導(dǎo)致自己沒(méi)有額外的時(shí)間進(jìn)行學(xué)習(xí)。 寫在前面 不管是開(kāi)發(fā)、測(cè)試、運(yùn)維,每個(gè)技術(shù)人員心里多多少少都有一個(gè)成為技術(shù)大牛的夢(mèng),畢竟夢(mèng)想總是要有的,萬(wàn)一實(shí)現(xiàn)了呢!正是對(duì)技術(shù)夢(mèng)的追求,促使我們不斷地努力和提升自己。然而夢(mèng)想是美好的,現(xiàn)實(shí)卻是殘酷的,很多同學(xué)在實(shí)際工作后...
摘要:我們以請(qǐng)求網(wǎng)絡(luò)服務(wù)為例,來(lái)實(shí)際測(cè)試一下加入多線程之后的效果。所以,執(zhí)行密集型操作時(shí),多線程是有用的,對(duì)于密集型操作,則每次只能使用一個(gè)線程。說(shuō)到這里,對(duì)于密集型,可以使用多線程或者多進(jìn)程來(lái)提高效率。 為了提高系統(tǒng)密集型運(yùn)算的效率,我們常常會(huì)使用到多個(gè)進(jìn)程或者是多個(gè)線程,python中的Threading包實(shí)現(xiàn)了線程,multiprocessing 包則實(shí)現(xiàn)了多進(jìn)程。而在3.2版本的py...
摘要:作為面試官,我是如何甄別應(yīng)聘者的包裝程度語(yǔ)言和等其他語(yǔ)言的對(duì)比分析和主從復(fù)制的原理詳解和持久化的原理是什么面試中經(jīng)常被問(wèn)到的持久化與恢復(fù)實(shí)現(xiàn)故障恢復(fù)自動(dòng)化詳解哨兵技術(shù)查漏補(bǔ)缺最易錯(cuò)過(guò)的技術(shù)要點(diǎn)大掃盲意外宕機(jī)不難解決,但你真的懂?dāng)?shù)據(jù)恢復(fù)嗎每秒 作為面試官,我是如何甄別應(yīng)聘者的包裝程度Go語(yǔ)言和Java、python等其他語(yǔ)言的對(duì)比分析 Redis和MySQL Redis:主從復(fù)制的原理詳...
閱讀 1066·2023-01-14 11:38
閱讀 1062·2023-01-14 11:04
閱讀 902·2023-01-14 10:48
閱讀 2377·2023-01-14 10:34
閱讀 1147·2023-01-14 10:24
閱讀 1026·2023-01-14 10:18
閱讀 654·2023-01-14 10:09
閱讀 733·2023-01-14 10:02