python自动化办公手册之python操作PPT
點(diǎn)擊上方“Python爬蟲與數(shù)據(jù)挖掘”,進(jìn)行關(guān)注
回復(fù)“書籍”即可獲贈(zèng)Python從入門到進(jìn)階共10本電子書
今
日
雞
湯
原得此生長(zhǎng)報(bào)國(guó),何須生入玉門關(guān)。
前言
1)python自動(dòng)化文檔手冊(cè)
python自動(dòng)化文章一直深受廣大python愛(ài)好者的青睞。基于此,我花了整整一周時(shí)間真理出來(lái)的python自動(dòng)化文檔手冊(cè),涉及到五個(gè)章節(jié)(如下圖所示),① python使用openpyxl操作excel;② python使用PyPDF2和pdfplumber操作pdf;③ python使用python-docx操作word;④ python使用python-pptx操作PPT;⑤ python如何自動(dòng)收發(fā)郵件;⑥ python制作電話號(hào)碼歸屬地查詢工具。
2)關(guān)于本文的說(shuō)明
python自動(dòng)化操作word,excel,pdf的文章,大家有時(shí)候會(huì)看到發(fā)布這樣的文章。但是python操作ppt的文章,卻少之又少。因此,我將這篇文章單獨(dú)整理出來(lái),供大家學(xué)習(xí)參考。其余文章詳細(xì)見(jiàn)文檔。
3)關(guān)于文檔的獲取(文末獲取)
python自動(dòng)化文檔手冊(cè)文檔已經(jīng)整理成冊(cè)(附帶標(biāo)簽),手冊(cè)中涉及到的數(shù)據(jù)都是自制。該文檔已經(jīng)上傳,請(qǐng)勿濫用,如有盜版,必定追究。
本文目錄
1、python-pptx模塊簡(jiǎn)介
使用python操作PPT,需要使用的模塊就是python-pptx,下面來(lái)對(duì)該模塊做一個(gè)簡(jiǎn)單的介紹。這里提前做一個(gè)說(shuō)明:python操作PPT,最好是我們提前設(shè)計(jì)好自己的一套樣式,然后利用進(jìn)行python進(jìn)行內(nèi)容的獲取和填充(最主要的功能!),最好是不用使用python代碼操作PPT的格式,格式的修改肯定不如我們直接在PPT中修改方便。
可以創(chuàng)建、修改PPT(.pptx)文件
需要單獨(dú)安裝,不包含在Python標(biāo)準(zhǔn)模塊里
python-pptx官網(wǎng)介紹:https://python-pptx.readthedocs.io/en/latest/
2、模塊的安裝與導(dǎo)入
1)模塊的安裝
"Windows用戶命令行下輸入" pip install python-pptx "Mac用戶命令行下輸入" pip3 install python-pptx2)模塊的導(dǎo)入
這里有一點(diǎn)需要注意的是:安裝的庫(kù)是python-pptx,但是導(dǎo)入的時(shí)候卻有點(diǎn)不同。
import pptx3、python讀取PPT文檔中的內(nèi)容
1)PPT的結(jié)構(gòu)說(shuō)明
在使用python操作PPT之前,首先應(yīng)該清楚PPT的結(jié)構(gòu),這個(gè)對(duì)于之后代碼的編寫很有幫助。注意:關(guān)于run塊兒的概念,可以參考我的另外一篇文章https://blog.csdn.net/weixin_41261833/article/details/106028038
2)獲取Slide
from pptx import Presentationprs = Presentation("統(tǒng)計(jì)學(xué)習(xí)方法PPT.pptx") for slide in prs.slides:print(slide)結(jié)果如下:
3)獲取Shape形狀
import pptx from pptx import Presentationprs = Presentation("統(tǒng)計(jì)學(xué)習(xí)方法PPT.pptx") for slide in prs.slides:for shape in slide.shapes:print(shape) """ 注意:這里得到的Shape對(duì)象,并不能看出什么,接著往下看。 """結(jié)果如下:
4)判斷每個(gè)Shape中是否存在文字
shape.has_text_frame :是否有文字
shape.text_frame :獲取文字框
結(jié)果如下:
5)獲取某一頁(yè)Slide中的內(nèi)容
import pptx from pptx import Presentationprs = Presentation("統(tǒng)計(jì)學(xué)習(xí)方法PPT.pptx")for i,slide in enumerate(prs.slides):if i == 5:for shape in slide.shapes:if shape.has_text_frame:text_frame = shape.text_frameprint(text_frame.text)結(jié)果如下:
6)獲取Shape中的某個(gè)Paragraph
import pptx from pptx import Presentationprs = Presentation("統(tǒng)計(jì)學(xué)習(xí)方法PPT.pptx")for i,slide in enumerate(prs.slides):if i == 5:for shape in slide.shapes:if shape.has_text_frame:text_frame = shape.text_framefor paragraph in text_frame.paragraphs:print(paragraph.text) """ 注意:該方法和上述4)中的方法一摸一樣。上述方法是直接獲取Shpae中的文字內(nèi)容; 下面這個(gè)更靈活,先獲取每個(gè)Shape,然后在獲取每個(gè)Shape中的paragraph; 下面方式更好:因?yàn)槲覀兛梢葬槍?duì)paragraph,寫一個(gè)判斷條件,只獲取第幾個(gè)paragraph; """結(jié)果如下:
4、利用python像PPT中寫入內(nèi)容
1)幻燈片模板及占位符的概念
在這里插入圖片描述2)怎么自定義母版?
https://jingyan.baidu.com/article/925f8cb8b5dfe7c0dce05671.html
3)什么是版式?
這個(gè)概念在下面的效果中,會(huì)得以體現(xiàn)。其中prs.slide_layouts[]傳入0表示獲取的是第一個(gè)版式,傳入1表示獲取的是第二個(gè)版式,以此類推下去。
4)添加Slide和內(nèi)容
這里就需要使用上述的自定義母版。因?yàn)楫吘故鞘褂胮ython操作PPT,我們可以定義好自己想要展示的PPT母版,然后借助代碼完成PPT的內(nèi)容寫入操作。
① 占位符id的確認(rèn)
import pptx from pptx import Presentationprs = Presentation("空白.pptx") # prs.slide_layouts[]表示的是ppt中不同的版式 slide = prs.slides.add_slide(prs.slide_layouts[0]) for shape in slide.placeholders:phf = shape.placeholder_formatprint(f"{phf.idx}--{shape.name}--{phf.type}")shape.text = f"{phf.idx}--{shape.name}--{phf.type}" # 注意:做完這個(gè)操作,一定要記得保存一下! prs.save("電子獎(jiǎng)狀模板.pptx") """ 上述打印結(jié)果如下: 0--Title 1--TITLE (1) 這個(gè)表示標(biāo)題占位符,id為0 13--Picture Placeholder 2--PICTURE (18) 這個(gè)表示圖片占位符,id為13 14--Text Placeholder 3--BODY (2) 這個(gè)表示正文內(nèi)容占位符,id為14 15--Text Placeholder 4--BODY (2) 這個(gè)表示正文內(nèi)容占位符,id為15 我們一定要先知道每個(gè)空格的占位符id,才可以進(jìn)行下面內(nèi)容的填充。 """效果如下:
② PPT內(nèi)容的填寫
import pptx from pptx import Presentationprs = Presentation("空白.pptx") slide = prs.slides.add_slide(prs.slide_layouts[0]) name = slide.placeholders[14] why = slide.placeholders[15]name.text = "黃同學(xué)" why.text = "學(xué)習(xí)太積極" prs.save("內(nèi)容填充.pptx")效果如下:
5)添加段落
① 占位符id的確認(rèn)
import pptx from pptx import Presentationprs = Presentation("finall.pptx") slide = prs.slides.add_slide(prs.slide_layouts[0]) for shape in slide.placeholders:phf = shape.placeholder_formatprint(f"{phf.idx}--{shape.name}--{phf.type}")shape.text = f"{phf.idx}--{shape.name}--{phf.type}" print("-------------------------------------------") slide = prs.slides.add_slide(prs.slide_layouts[1]) for shape in slide.placeholders:phf = shape.placeholder_formatprint(f"{phf.idx}--{shape.name}--{phf.type}")shape.text = f"{phf.idx}--{shape.name}--{phf.type}"prs.save("哈哈.pptx")效果如下:
② 段落的添加
import pptx from pptx import Presentationprs = Presentation("finall.pptx") slide = prs.slides.add_slide(prs.slide_layouts[0]) name = slide.placeholders[14] why = slide.placeholders[15] name.text = "黃同學(xué)" why.text = "學(xué)習(xí)太積極" # --------------------------------------------------- # prs1 = Presentation("finall.pptx") slide1 = prs.slides.add_slide(prs.slide_layouts[1]) shapes = slide1.shapes title_shape = shapes.title # 這句代碼可以改為title_shape = shapes.placeholders[0] body_shape = shapes.placeholders[1]title_shape.text = "這是一個(gè)標(biāo)題"tf = body_shape.text_frame # 這句代碼就是給body占位符添加內(nèi)容! tf.text = "帶圓點(diǎn)的符號(hào)1"p = tf.add_paragraph() # 這個(gè)代碼表示在原來(lái)的基礎(chǔ)上,添加第一個(gè)段落! p.text = "帶圓點(diǎn)的符號(hào)2"p = tf.add_paragraph() # 這個(gè)代碼表示在原來(lái)的基礎(chǔ)上,添加第二個(gè)段落! p.text = "帶圓點(diǎn)的符號(hào)3"prs.save("嘿嘿.pptx")效果如下:
③ 給段落設(shè)定層級(jí)關(guān)系
import pptx from pptx import Presentationprs = Presentation("finall.pptx") slide = prs.slides.add_slide(prs.slide_layouts[0]) name = slide.placeholders[14] why = slide.placeholders[15] name.text = "黃同學(xué)" why.text = "學(xué)習(xí)太積極" # --------------------------------------------------- # prs1 = Presentation("finall.pptx") slide1 = prs.slides.add_slide(prs.slide_layouts[1]) shapes = slide1.shapes title_shape = shapes.title # 這句代碼可以改為title_shape = shapes.placeholders[0] body_shape = shapes.placeholders[1]title_shape.text = "這是一個(gè)標(biāo)題"tf = body_shape.text_frame tf.text = "帶圓點(diǎn)的符號(hào)1"p = tf.add_paragraph() p.text = "帶圓點(diǎn)的符號(hào)2" # 原始內(nèi)容的層級(jí)相當(dāng)于是0,因此這個(gè)段落我設(shè)置為層級(jí)1,下面的段落設(shè)置為層級(jí)2 p.level = 1p = tf.add_paragraph() p.text = "帶圓點(diǎn)的符號(hào)3" p.level = 2prs.save("嘻嘻.pptx")效果如下:
④ 添加一個(gè)文本框
slide.shapes.add_textbox(left, top, width, height)
效果如下:
⑤ 添加一個(gè)圖片
slide.shapes.add_picture(圖片路徑, 距離左邊, 距離頂端, 寬度, 高度)
第一種展示:
from pptx import Presentation from pptx.util import Cmprs = Presentation() # 使用第七個(gè)版式 black_slide_layout = prs.slide_layouts[6] slide = prs.slides.add_slide(black_slide_layout)left = top = Cm(3) pic = slide.shapes.add_picture("孫悟空.png", left, top)prs.save("添加圖片1.pptx")效果如下:第二種展示:
from pptx import Presentation from pptx.util import Cmprs = Presentation() # 使用第七個(gè)版式 black_slide_layout = prs.slide_layouts[6] slide = prs.slides.add_slide(black_slide_layout)left = top = Cm(3) height = Cm(5.5) pic = slide.shapes.add_picture("孫悟空.png", left, top, height=height)prs.save("添加圖片2.pptx")效果如下:
⑥ 添加表格
shapes.add_table(rows, cols, left, top, width, height)
結(jié)果如下:
5、PPT文檔內(nèi)容樣式批量調(diào)整
1)文本框位置的調(diào)整
上面我們已經(jīng)知道怎么添加文本框,現(xiàn)在我們需要做的就是,怎么調(diào)整文本框的位置。
from pptx import Presentation from pptx.util import Cm, Pt from pptx.enum.text import MSO_ANCHOR, MSO_AUTO_SIZEprs = Presentation() # 使用第七個(gè)版式 black_slide_layout = prs.slide_layouts[6] slide = prs.slides.add_slide(black_slide_layout)left = top = width = height = Cm(3) text_box = slide.shapes.add_textbox(left, top, width, height) tf = text_box.text_frame tf.text = "這是一段文本框里面的文字" # ----------------------------------------- # tf.margin_bottom = Cm(0.1) # 下邊距 tf.margin_left = 0 # 下邊距 # 一定要導(dǎo)入MSO_ANCHOR這個(gè)庫(kù) tf.vertical_anchor = MSO_ANCHOR.BOTTOM # 對(duì)齊文本方式:底端對(duì)齊 tf.word_wrap = True # 框中的文字自動(dòng)換行prs.save("文本框樣式的調(diào)整.pptx")結(jié)果如下:
2)文本框背景顏色調(diào)整
from pptx import Presentation from pptx.util import Cm, Pt from pptx.enum.text import MSO_ANCHOR, MSO_AUTO_SIZE from pptx.dml.color import RGBColorprs = Presentation() # 使用第七個(gè)版式 black_slide_layout = prs.slide_layouts[6] slide = prs.slides.add_slide(black_slide_layout)left = top = width = height = Cm(3) text_box = slide.shapes.add_textbox(left, top, width, height) tf = text_box.text_frame tf.text = "這是一段文本框里面的文字" # -------------------------------------- # tf.margin_bottom = Cm(0.1) # 下邊距 tf.margin_left = 0 # 下邊距 tf.vertical_anchor = MSO_ANCHOR.BOTTOM tf.word_wrap = True # 框中的文字自動(dòng)換行 # -------------------------------------- # fill = text_box.fill fill.solid() # 使用之前一定要導(dǎo)入RGBColor這個(gè)庫(kù) fill.fore_color.rgb = RGBColor(247, 150, 70)prs.save("文本框背景色的調(diào)整.pptx")結(jié)果如下:
3)文本框邊框樣式調(diào)整
from pptx import Presentation from pptx.util import Cm, Pt from pptx.enum.text import MSO_ANCHOR, MSO_AUTO_SIZE from pptx.dml.color import RGBColorprs = Presentation() # 使用第七個(gè)版式 black_slide_layout = prs.slide_layouts[6] slide = prs.slides.add_slide(black_slide_layout)left = top = width = height = Cm(3) text_box = slide.shapes.add_textbox(left, top, width, height) tf = text_box.text_frame tf.text = "這是一段文本框里面的文字" # -------------------------------------- # tf.margin_bottom = Cm(0.1) # 下邊距 tf.margin_left = 0 # 下邊距 tf.vertical_anchor = MSO_ANCHOR.BOTTOM tf.word_wrap = True # 框中的文字自動(dòng)換行 # -------------------------------------- # fill = text_box.fill fill.solid() # 使用之前一定要導(dǎo)入RGBColor這個(gè)庫(kù) fill.fore_color.rgb = RGBColor(247, 150, 70) # -------------------------------------- # line = text_box.line line.color.rgb = RGBColor(255, 0, 0) line.width = Cm(0.3)prs.save("文本框邊框樣式調(diào)整.pptx")結(jié)果如下:
4)段落對(duì)其調(diào)整
from pptx import Presentation from pptx.enum.text import PP_ALIGNprs = Presentation() # 使用第七個(gè)版式 black_slide_layout = prs.slide_layouts[6] slide = prs.slides.add_slide(black_slide_layout)left = top = width = height = Cm(3) text_box = slide.shapes.add_textbox(left, top, width, height) tf = text_box.text_frame # ---------------------------- # p = tf.add_paragraph() p.text = "這是第二段文字" p.alignment = PP_ALIGN.LEFTprs.save("段落對(duì)其調(diào)整.pptx")當(dāng)然這里還有一些其他樣式的調(diào)整,和word很類似,就不一一敘述了。
5)字體樣式調(diào)整
代碼如下:
from pptx import Presentation from pptx.util import Cm, Pt from pptx.enum.text import MSO_ANCHOR, MSO_AUTO_SIZE from pptx.dml.color import RGBColor from pptx.enum.text import PP_ALIGNprs = Presentation() # 使用第七個(gè)版式 black_slide_layout = prs.slide_layouts[6] slide = prs.slides.add_slide(black_slide_layout)left = top = width = height = Cm(3) text_box = slide.shapes.add_textbox(left, top, width, height) tf = text_box.text_frame # ---------------------------- # p = tf.add_paragraph() p.text = "這是第二段文字" p.alignment = PP_ALIGN.LEFT # ------------------------------------- # p.font.bold = True p.font.name = "宋體" p.font.color.rgb = RGBColor(247, 150, 70) p.font.size = Pt(30)prs.save("字體樣式調(diào)整.pptx")結(jié)果如下:
在微信公眾號(hào)『數(shù)據(jù)分析與統(tǒng)計(jì)學(xué)之美』后臺(tái)回復(fù)“自動(dòng)化數(shù)據(jù)”獲取python自動(dòng)化文檔及數(shù)據(jù)。
-------------------?End?-------------------
往期精彩文章推薦:
手把手用Python教你如何發(fā)現(xiàn)隱藏wifi
手把手教你用Python做個(gè)可視化的“剪刀石頭布”小游戲
手把手用Python網(wǎng)絡(luò)爬蟲帶你爬取全國(guó)著名高校附近酒店評(píng)論
歡迎大家點(diǎn)贊,留言,轉(zhuǎn)發(fā),轉(zhuǎn)載,感謝大家的相伴與支持
想加入Python學(xué)習(xí)群請(qǐng)?jiān)诤笈_(tái)回復(fù)【入群】
萬(wàn)水千山總是情,點(diǎn)個(gè)【在看】行不行
/今日留言主題/
隨便說(shuō)一兩句吧~~
總結(jié)
以上是生活随笔為你收集整理的python自动化办公手册之python操作PPT的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 分享一下免费的ppt网站(好看,免费)
- 下一篇: 用Python【批量】生产【电子奖状】的