网易首页 > 网易号 > 正文 申请入驻

python自动化办公手册之python操作PPT

0
分享至

前言

大家好,欢迎来到 Crossin的编程教室 !

关于python自动化操作word,excel,pdf等文件的教程,大家应该看到过不少。但是python操作ppt的文章,却少之又少。因此,今天我们就单独把这一部分整理出来,和大家分享一下。

使用python操作PPT,需要使用的模块就是python-pptx,下面来对该模块做一个简单的介绍。这里提前做一个说明:python操作PPT,最好是我们提前设计好自己的一套样式,然后利用进行python进行内容的获取和填充(最主要的功能!),最好是不用使用python代码操作PPT的格式,格式的修改肯定不如我们直接在PPT中修改方便。

  • 可以创建、修改PPT(.pptx)文件

  • 需要单独安装,不包含在Python标准模块里

  • python-pptx官网介绍:https://python-pptx.readthedocs.io/en/latest/

2、模块的安装与导入 1)模块的安装
"Windows用户命令行下输入"pip install python-pptx"Mac用户命令行下输入"pip3 install python-pptx
2)模块的导入

这里有一点需要注意的是:安装的库是python-pptx,但是导入的时候却有点不同。


import pptx
3、python读取PPT文档中的内容 1)PPT的结构说明

2)获取Slide

from pptx import Presentation
prs = Presentation("统计学习方法PPT.pptx")for slide in prs.slides:print(slide)

3)获取Shape形状

import pptxfrom pptx import Presentation
prs = Presentation("统计学习方法PPT.pptx")for slide in prs.slides:for shape in slide.shapes:print(shape)"""注意:这里得到的Shape对象,并不能看出什么,接着往下看。"""

4)判断每个Shape中是否存在文字

  • shape.has_text_frame :是否有文字

  • shape.text_frame :获取文字框


import pptxfrom pptx import Presentation
prs = Presentation("统计学习方法PPT.pptx")for slide in prs.slides:for shape in slide.shapes:if shape.has_text_frame:text_frame = shape.text_frameprint(text_frame.text)

5)获取某一页Slide中的内容

import pptxfrom pptx import Presentation
prs = Presentation("统计学习方法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)

6)获取Shape中的某个Paragraph

import pptxfrom pptx import Presentation
prs = Presentation("统计学习方法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中的文字内容;下面这个更灵活,先获取每个Shape,然后再获取每个Shape中的paragraph;下面方式更好:因为我们可以针对paragraph,写一个判断条件,只获取第几个paragraph;"""

https://jingyan.baidu.com/article/925f8cb8b5dfe7c0dce05671.html

3)什么是版式?

4)添加Slide和内容

这里就需要使用上述的自定义母版。因为毕竟是使用python操作PPT,我们可以定义好自己想要展示的PPT母版,然后借助代码完成PPT的内容写入操作。

① 占位符id的确认

import pptxfrom pptx import Presentation
prs = 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}"# 注意:做完这个操作,一定要记得保存一下!prs.save("电子奖状模板.pptx")"""上述打印结果如下:0--Title 1--TITLE (1) 这个表示标题占位符,id为013--Picture Placeholder 2--PICTURE (18) 这个表示图片占位符,id为1314--Text Placeholder 3--BODY (2) 这个表示正文内容占位符,id为1415--Text Placeholder 4--BODY (2) 这个表示正文内容占位符,id为15我们一定要先知道每个空格的占位符id,才可以进行下面内容的填充。"""

② PPT内容的填写

import pptxfrom pptx import Presentation
prs = Presentation("空白.pptx")slide = prs.slides.add_slide(prs.slide_layouts[0])name = slide.placeholders[14]why = slide.placeholders[15]
name.text = "黄同学"why.text = "学习太积极"prs.save("内容填充.pptx")

5)添加段落 ① 占位符id的确认

import pptxfrom pptx import Presentation
prs = 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 pptxfrom pptx import Presentation
prs = Presentation("finall.pptx")slide = prs.slides.add_slide(prs.slide_layouts[0])name = slide.placeholders[14]why = slide.placeholders[15]name.text = "黄同学"why.text = "学习太积极"prs1 = Presentation("finall.pptx")slide1 = prs.slides.add_slide(prs.slide_layouts[1])shapes = slide1.shapestitle_shape = shapes.title # 这句代码可以改为title_shape = shapes.placeholders[0]body_shape = shapes.placeholders[1]
title_shape.text = "这是一个标题"
tf = body_shape.text_frame# 这句代码就是给body占位符添加内容!tf.text = "带圆点的符号1"
p = tf.add_paragraph()# 这个代码表示在原来的基础上,添加第一个段落!p.text = "带圆点的符号2"
p = tf.add_paragraph()# 这个代码表示在原来的基础上,添加第二个段落!p.text = "带圆点的符号3"
prs.save("嘿嘿.pptx")

③ 给段落设定层级关系

import pptxfrom pptx import Presentation
prs = Presentation("finall.pptx")slide = prs.slides.add_slide(prs.slide_layouts[0])name = slide.placeholders[14]why = slide.placeholders[15]name.text = "黄同学"why.text = "学习太积极"prs1 = Presentation("finall.pptx")slide1 = prs.slides.add_slide(prs.slide_layouts[1])shapes = slide1.shapestitle_shape = shapes.title # 这句代码可以改为title_shape = shapes.placeholders[0]body_shape = shapes.placeholders[1]
title_shape.text = "这是一个标题"
tf = body_shape.text_frametf.text = "带圆点的符号1"
p = tf.add_paragraph()p.text = "带圆点的符号2"# 原始内容的层级相当于是0,因此这个段落我设置为层级1,下面的段落设置为层级2p.level = 1
p = tf.add_paragraph()p.text = "带圆点的符号3"p.level = 2
prs.save("嘻嘻.pptx")

④ 添加一个文本框

  • slide.shapes.add_textbox(left, top, width, height)


from pptx import Presentationfrom pptx.util import Cm, Pt
prs = Presentation()# 使用第一个版式black_slide_layout = prs.slide_layouts[0]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_frametf.text = "这是一段文本框里面的文字"
p = tf.add_paragraph()p.text = "这是第二段文字,加粗,字号40"p.font.bold = Truep.font.size = Pt(40)
prs.save("添加一个文本框0.pptx")

⑤ 添加一个图片

  • slide.shapes.add_picture(图片路径, 距离左边, 距离顶端, 宽度, 高度)

第一种展示:


from pptx import Presentationfrom pptx.util import Cm
prs = Presentation()# 使用第七个版式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 Presentationfrom pptx.util import Cm
prs = Presentation()# 使用第七个版式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)


from pptx import Presentationfrom pptx.util import Cm, Pt
prs = Presentation()# 使用第七个版式black_slide_layout = prs.slide_layouts[6]slide = prs.slides.add_slide(black_slide_layout)shapes = slide.shapes
rows, cols = 5, 3left = top = Cm(5)width = Cm(18)height = Cm(3)
table = shapes.add_table(rows, cols, left, top, width, height).tabletable.columns[0].width = Cm(6)table.columns[1].width = Cm(2)table.columns[2].width = Cm(2)table.rows[0].height = Cm(2)
data = [["姓名","性别","成绩"],["张三","男",96],["李四","女",87],["王五","女",90],["赵六","男",78]
for row in range(rows):for col in range(cols):table.cell(row,col).text = str(data[row][col])prs.save("插入表格.pptx")

5、PPT文档内容样式批量调整 1)文本框位置的调整

上面我们已经知道怎么添加文本框,现在我们需要做的就是,怎么调整文本框的位置。


from pptx import Presentationfrom pptx.util import Cm, Ptfrom pptx.enum.text import MSO_ANCHOR, MSO_AUTO_SIZE
prs = Presentation()# 使用第七个版式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_frametf.text = "这是一段文本框里面的文字"tf.margin_bottom = Cm(0.1) # 下边距tf.margin_left = 0 # 下边距# 一定要导入MSO_ANCHOR这个库tf.vertical_anchor = MSO_ANCHOR.BOTTOM # 对齐文本方式:底端对齐tf.word_wrap = True # 框中的文字自动换行
prs.save("文本框样式的调整.pptx")

2)文本框背景颜色调整

from pptx import Presentationfrom pptx.util import Cm, Ptfrom pptx.enum.text import MSO_ANCHOR, MSO_AUTO_SIZEfrom pptx.dml.color import RGBColor
prs = Presentation()# 使用第七个版式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_frametf.text = "这是一段文本框里面的文字"tf.margin_bottom = Cm(0.1) # 下边距tf.margin_left = 0 # 下边距tf.vertical_anchor = MSO_ANCHOR.BOTTOMtf.word_wrap = True # 框中的文字自动换行fill = text_box.fillfill.solid()# 使用之前一定要导入RGBColor这个库fill.fore_color.rgb = RGBColor(247, 150, 70)
prs.save("文本框背景色的调整.pptx")

3)文本框边框样式调整

from pptx import Presentationfrom pptx.util import Cm, Ptfrom pptx.enum.text import MSO_ANCHOR, MSO_AUTO_SIZEfrom pptx.dml.color import RGBColor
prs = Presentation()# 使用第七个版式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_frametf.text = "这是一段文本框里面的文字"tf.margin_bottom = Cm(0.1) # 下边距tf.margin_left = 0 # 下边距tf.vertical_anchor = MSO_ANCHOR.BOTTOMtf.word_wrap = True # 框中的文字自动换行fill = text_box.fillfill.solid()# 使用之前一定要导入RGBColor这个库fill.fore_color.rgb = RGBColor(247, 150, 70)line = text_box.lineline.color.rgb = RGBColor(255, 0, 0)line.width = Cm(0.3)
prs.save("文本框边框样式调整.pptx")

4)段落对其调整

from pptx import Presentationfrom pptx.enum.text import PP_ALIGN
prs = Presentation()# 使用第七个版式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_framep = tf.add_paragraph()p.text = "这是第二段文字"p.alignment = PP_ALIGN.LEFT
prs.save("段落对其调整.pptx")

5)字体样式调整


from pptx import Presentationfrom pptx.util import Cm, Ptfrom pptx.enum.text import MSO_ANCHOR, MSO_AUTO_SIZEfrom pptx.dml.color import RGBColorfrom pptx.enum.text import PP_ALIGN
prs = Presentation()# 使用第七个版式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_framep = tf.add_paragraph()p.text = "这是第二段文字"p.alignment = PP_ALIGN.LEFTp.font.bold = Truep.font.name = "宋体"p.font.color.rgb = RGBColor(247, 150, 70)p.font.size = Pt(30)
prs.save("字体样式调整.pptx")

以上就是通过python自动化操作PPT文件的演示。

如果文章对你有帮助,欢迎转发/点赞/收藏~

作者:黄伟呢

来源:数据分析与统计学之美

如需了解付费精品课程教学答疑服务

请在Crossin的编程教室内回复:666

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
唯一没有资格举办奥运会的世界强国,奥委会至今“一票否决”

唯一没有资格举办奥运会的世界强国,奥委会至今“一票否决”

小豆豆赛事
2024-06-13 07:45:35
阿斯:皇马拥有先进面罩技术&担忧姆巴佩,但他们现在无权介入

阿斯:皇马拥有先进面罩技术&担忧姆巴佩,但他们现在无权介入

直播吧
2024-06-19 13:49:13
为什么认为江浙沪一带的女生普遍长得很好看?网友:瞎扯,不同意

为什么认为江浙沪一带的女生普遍长得很好看?网友:瞎扯,不同意

奇特短尾矮袋鼠
2024-06-19 18:18:58
意外!成都蓉城核心外援跟徐正源摊牌,未来夏窗不续约就去泰山队

意外!成都蓉城核心外援跟徐正源摊牌,未来夏窗不续约就去泰山队

评球论事
2024-06-19 21:14:20
金正恩为普京举行欢迎仪式,随行翻译小伙帅如明星,金与正也美翻

金正恩为普京举行欢迎仪式,随行翻译小伙帅如明星,金与正也美翻

影视解说阿相
2024-06-19 19:34:55
闹大!雷军发洗车视频,狂吹自家洗车器,正式带货,网友彻底炸锅

闹大!雷军发洗车视频,狂吹自家洗车器,正式带货,网友彻底炸锅

鑫鑫说说
2024-06-18 14:55:14
低级趣味,颜宁院士演讲时,那双“粗壮”的腿引发了热议。

低级趣味,颜宁院士演讲时,那双“粗壮”的腿引发了热议。

嘿哥哥科技
2024-06-18 11:09:15
噩耗:他于6月19日去世。出身“中国最牛家族”,干出七个第一

噩耗:他于6月19日去世。出身“中国最牛家族”,干出七个第一

华人星光
2024-06-19 16:23:29
6月18日,林更新评论区沦陷了!

6月18日,林更新评论区沦陷了!

紫雨说娱乐
2024-06-18 16:03:53
“人造数学天才”,一个非常拙劣的谎言,彻头彻尾的炒作

“人造数学天才”,一个非常拙劣的谎言,彻头彻尾的炒作

爆角追踪
2024-06-18 17:25:17
吴彦祖父亲节晒与爸爸合影,无P学生照多颗痤疮引热议

吴彦祖父亲节晒与爸爸合影,无P学生照多颗痤疮引热议

葫芦哥爱吐槽
2024-06-18 16:45:19
一对情侣与领导吃烧烤,领导把男方灌醉,与女方去厕所偷偷接吻

一对情侣与领导吃烧烤,领导把男方灌醉,与女方去厕所偷偷接吻

一个岛岛
2024-06-18 22:52:05
华为向一汽软件公司正式授权全套HUWEI HiCar SDK源码

华为向一汽软件公司正式授权全套HUWEI HiCar SDK源码

IT之家
2024-06-19 18:26:10
南方医科大学俞莉医生简历曝光,瞬间网友引发热议看面相是个好人

南方医科大学俞莉医生简历曝光,瞬间网友引发热议看面相是个好人

王晓爱体彩
2024-06-20 01:27:37
俄罗斯总检察长:中国军事检察官将于11月在俄接受培训

俄罗斯总检察长:中国军事检察官将于11月在俄接受培训

俄罗斯卫星通讯社
2024-06-19 15:02:34
梅西:很遗憾内马尔无缘美洲杯,但巴西仍很强大、很有竞争力

梅西:很遗憾内马尔无缘美洲杯,但巴西仍很强大、很有竞争力

直播吧
2024-06-20 03:09:05
国外电视台为了收视率,女主播们露球播报,观众每天都会准时收看

国外电视台为了收视率,女主播们露球播报,观众每天都会准时收看

影孖看世界
2024-05-11 20:23:58
CBA最新消息!特莱斯加盟北控,费尔德确定离队,上海更换教练

CBA最新消息!特莱斯加盟北控,费尔德确定离队,上海更换教练

体坛瞎白话
2024-06-19 15:34:13
上海近300个小区都发现了,已经产生冲突!紧急提醒:千万保持距离→

上海近300个小区都发现了,已经产生冲突!紧急提醒:千万保持距离→

文雅笔墨
2024-06-18 23:13:45
发现妻子出轨第5天,我麻利做完财产分割,微笑祝福他俩白头偕老

发现妻子出轨第5天,我麻利做完财产分割,微笑祝福他俩白头偕老

星辰故事屋
2024-06-05 12:18:58
2024-06-20 08:28:49
Crossin的编程教室
Crossin的编程教室
简单有趣的python入门
391文章数 702关注度
往期回顾 全部

科技要闻

美国AI圈震动! “OpenAI宫斗”核心人物苏茨克维官宣创业

头条要闻

美媒:真主党有十几万枚炮弹 或3天摧毁以基础设施

头条要闻

美媒:真主党有十几万枚炮弹 或3天摧毁以基础设施

体育要闻

欧洲杯最大的混子,非他莫属

娱乐要闻

黄一鸣“杀疯了” 直播间卖大葱养孩子

财经要闻

深化科创板改革 证监会发布八条措施

汽车要闻

双肾格栅变化大/内饰焕新 新一代宝马X3官图发布

态度原创

家居
游戏
健康
时尚
教育

家居要闻

自然开放 实现灵动可变空间

20周年纪念版要来 《超越善恶》原版游戏下架停售

晚餐不吃or吃七分饱,哪种更减肥?

几个小物件,打造宅家时的「inner peace」

教育要闻

为什么普通人应该生一个孩子呢 到底是对是错

无障碍浏览 进入关怀版