用Python操作PPT的办公自动化教程
PPT通過其精美的可視化技巧以及良好的演示效果,成為了職場人士的必備技能。PPT的設計是一門大學問,無論是設計技巧,還是操作方法,都衍生出了專門的課程。
主要介紹Python操作PPT的技巧,編程的優勢在于處理速度,對于高大上的PPT設計,還是需要"以人為本,所以該模塊的使用場景主要是PPT基本元素的提取和添加,適合大量內容的轉化,比如word轉PPT, 減少大量繁瑣的人工操作,盡管提供了一些基本的樣式設計,但是滿足日常辦公對PPT美觀性的要求上還是差點意思。
安裝模塊
Windows用戶打開命令行輸入:pip install python-pptx
Mac用戶打開終端/Terminal輸入:pip3 install python-pptx
使用windows系統,如果出現無法安裝情況,可以在cmd模式下輸入網址選擇國內清華鏡像。
pip install -i?https://pypi.tuna.tsinghua.edu.cn/simple?python-pptx
導入模塊:import pptx
參考文檔地址:https://python-pptx.readthedocs.io/en/latest/index.html
PPT的基本結構介紹
在該模塊中,將ppt拆分為了以下多個元素
presentations, 表示整個ppt文檔
sliders. 表示ppt文檔的每一頁
shapes 方框,在每頁幻燈片內插入的方框,可以是形狀,也可以是文本框
Run 文字塊 一般為較少字符
Paragraph 段落,即Shape中的每一段內容,都稱為一個段落
基本使用:
from?pptx?import?Presentation from?pptx.enum.shapes?import?MSO_SHAPE from?pptx.util?import?Inches,?Pt,?Cmprs?=?Presentation()????#默認模板prs?=?Presentation(mypath)????#使用自己定義的模板獲取PPT內容
from?pptx?import?Presentation from?pptx.util?import?Inches #?1.?得到幻燈片對象 prs?=?Presentation("demo.pptx") #?2.?獲取prs對象中的每一頁PPT for?slide?in?prs.slides:#?3.?遍歷獲取每頁PPT中的內容for?shape?in?slide.shapes:?#?4.?打印具體的Shapeprint(shape)#?5.?我是一條華麗的分割線,劃分不同的slideprint("——————————————————————————")輸出結果:
如果想獲取每個Shape里面的文字也可以:
shape.has_text_frame ----->是否有文字 shape.text_frame ----->獲取文字框
from?pptx?import?Presentation from?pptx.util?import?Inches #?1.?得到幻燈片對象 prs?=?Presentation("demo.pptx") #?2.?獲取prs對象中的每一頁PPT for?slide?in?prs.slides:#?3.?遍歷獲取每頁PPT中的內容for?shape?in?slide.shapes:?#?4.?判斷是否存在文本if?shape.has_text_frame:#?5.?如果存在則獲取內容text_frame?=?shape.text_frameprint(text_frame.text)#?6.?我是一條華麗的分割線,劃分不同的slideprint("——————————————————————————")??????輸出的結果(對比前面的幻燈片):
從shape中找paragraph
from?pptx?import?Presentation from?pptx.util?import?Inches #?1.?得到幻燈片對象 prs?=?Presentation("demo.pptx") #?2.?獲取prs對象中的每一頁PPT for?slide?in?prs.slides:#?3.?遍歷獲取每頁PPT中的內容for?shape?in?slide.shapes:?#?4.?判斷是否存在文本if?shape.has_text_frame:#?5.?獲取shape中的文本text_frame?=?shape.text_frame#?6.?獲取text_frame中的段落內容for?paragraph?in?text_frame.paragraphs:#?7.?打印段落內容print(paragraph.text)print('----------paragraph------------')綜合應用
編寫一個Python程序,要求
(1)打開demo.pptx
(2)按照paragraph分段,轉換成為word文檔
(3)保存為demo.docx
from?pptx?import?Presentation from?docx?import?Documentdoc?=?Document() prs?=?Presentation("婚禮策劃師的最愛.pptx") ls?=?[] for?slide?in?prs.slides:for?shape?in?slide.shapes:if?shape.has_text_frame:text_frame?=?shape.text_framefor?paragraph?in?text_frame.paragraphs:if?paragraph.text?!=?'':doc.add_paragraph(paragraph.text)doc.save("demo.docx")向PPT寫入內容
首先了解模板和占位符
Slides_layouts:版式,一個幻燈片母版由多個版式組成,索引從0開始。
Placeholder:占位符:存在PPT母版里面的幻燈片的某一部件:Placeholder
在創建一頁ppt時,需要指定對應的布局,在該模塊中, 內置了以下9種布局
Title
Title and Content
Section Header
Two Content
Comparison
Title Only
Blank
Content with Caption
Picture with Caption
通過數字下標0到9來訪問,指定布局添加一頁ppt的用法如下:
創建placeholders
from?pptx?import?Presentationprs?=?Presentation()?#初始化一個空pptx文檔 slide?=?prs.slides.add_slide(prs.slide_layouts[0])??#?用第一個母版生成一頁ppt for?shape?in?slide.placeholders:?????????#?獲取這一頁所有的占位符phf?=?shape.placeholder_formatprint(f'{phf.idx}--{shape.name}--{phf.type}')??#?id號--占位符形狀名稱-占位符的類型shape.text?=?f'{phf.idx}--{shape.name}--{phf.type}' prs.save("new_template.pptx")也可以一次添加多個
from?pptx?import?Presentationprs?=?Presentation()?#初始化一個空pptx文檔 i?=?0 while?i?<=?10:slide?=?prs.slides.add_slide(prs.slide_layouts[i])??i?=?i+1for?shape?in?slide.placeholders:?????????#?獲取這一頁所有的占位符phf?=?shape.placeholder_formatprint(f'{phf.idx}--{shape.name}--{phf.type}')??#?id號--占位符形狀名稱-占位符的類型shape.text?=?f'{phf.idx}--{shape.name}--{phf.type}' prs.save("new_template.pptx")向占位符中添加內容
主要使用:
shape.text = 字符串
prs.save(文件路徑)
from?pptx?import?Presentationprs?=?Presentation() #?用第一個母版生成一頁ppt slide?=?prs.slides.add_slide(prs.slide_layouts[1]) #?獲取當前頁的標題 title_shape?=?slide.shapes.title #?向標題中添加文本 title_shape.text?=?'宋宋的Python專欄' #?獲取副標題 subtitle?=?slide.shapes.placeholders[1] #?副標題中添加文本 subtitle.text?=?'宋宋是一個愛美的大女生'#?副標題中添加新段落 new_paragraph1?=?subtitle.text_frame.add_paragraph() #?向段落中添加文本 new_paragraph1.text?=?'我是一個專注學習技術的大女生' new_paragraph1.level?=?1new_paragraph2?=?subtitle.text_frame.add_paragraph() new_paragraph2.text?=?'我是一個認真寫文章的大女生哈哈哈' new_paragraph2.level?=?2#?保存內容 prs.save("寫入內容1.pptx")空白的PPT模板中添加文本框和圖形
from?pptx?import?Presentation from?pptx.util?import?Cm,Pt,Inches from?pptx.enum.shapes?import?MSO_SHAPEprs?=?Presentation('寫入內容1.pptx') slide?=?prs.slides.add_slide(prs.slide_layouts[6])?#?6的layout中是一個空白的Slider,里面沒有占位符#?單獨向里面添加文本框和圖片 left?=?top?=?width?=?height?=Cm(3)??#?# left,top為相對位置,width,height為文本框大小。滿足條件順序是左>上>右>下 text_box?=?slide.shapes.add_textbox(left,top,width,height) tf?=?text_box.text_frame tf.text?=?"歡迎來到宋宋的Python專欄"p?=?tf.add_paragraph() p.text?=?"宋宋的Python專欄,有20天學會Python基礎,20天學會爬蟲,20天學會數據分析,還有干活趣味文章!" p.font.bold?=?True p.font.size?=?Pt(15)#?添加圖形slide1?=?prs.slides.add_slide(prs.slide_layouts[6])? shapes?=?slide1.shapes left?=?top?=?width?=?height?=?Inches(1.0) shape?=?shapes.add_shape(MSO_SHAPE.ROUNDED_RECTANGLE,?left,?top,?width,?height)prs.save("寫入內容1_new.pptx")案例
現有一個公益捐書項目,有很多學生參與了本次活動,為了嘉獎這些學生,決定給每位學生發一張獎狀。參與捐贈的學生名單和捐書數量都在students.xlsx中。
讀取Excel中的數據
讀取做好的PPT模板
將每位同學的姓名和捐書數量設置到PPT上
保存PPT
模版樣式如下:
學生名單信息:
代碼如下:
from?pptx?import?Presentation from?pptx.util?import?Cm,Pt,Inches from?pptx.enum.shapes?import?MSO_SHAPE from?datetime?import?datetimefrom?openpyxl?import?load_workbook#?1.?加載cosmetics.xlsx表格 workbook?=?load_workbook(filename=?'students.xlsx') #?2.?得到Sheet1工作簿 sheet?=?workbook['Sheet1']#?按照行遍歷,一行是一個人的信息 for?row?in?sheet.iter_rows(min_row=2,?max_row=8,?min_col=?1,max_col=2):??#?涵蓋范圍的所有單元格都會顯示prs?=?Presentation("模版.pptx")#?2.?獲取prs對象中的每一頁PPTfor?slide?in?prs.slides:#?3.?遍歷獲取每頁PPT中的內容for?shape?in?slide.shapes:?#?4.?判斷是否存在文本if?shape.has_text_frame:#?5.?獲取shape中的文本text_frame?=?shape.text_frame#?6.?獲取text_frame中的段落內容for?paragraph?in?text_frame.paragraphs:paragraph.font.size?=?Pt(24)#?7.?打印段落內容if?paragraph.text=='__':paragraph.text=row[0].valueif?paragraph.text=='__冊':paragraph.text=f'{row[1].value}冊'if?paragraph.text=='日期:':paragraph.font.size?=?Pt(18)paragraph.text=str(datetime.now().strftime('%Y年%m月%d日'))prs.save(f"模版_{row[0].value}.pptx")-END-?
想要學習更多技術,加下方小姐姐領取全套教程及源碼筆記
總結
以上是生活随笔為你收集整理的用Python操作PPT的办公自动化教程的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 将Excel中的信息生成奖状
- 下一篇: 使用webgl(three.js)搭建一