python自动化办公操作PPT的实现


Posted in Python onFebruary 05, 2021

1、python-pptx模块简介

使用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的结构说明

在使用python操作PPT之前,首先应该清楚PPT的结构,这个对于之后代码的编写很有帮助。

python自动化办公操作PPT的实现

注意:关于run块儿的概念,可以参考我的另外一篇文章

2)获取Slide

from pptx import Presentation

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

结果如下:

python自动化办公操作PPT的实现

3)获取Shape形状

import pptx
from pptx import Presentation

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

结果如下:

python自动化办公操作PPT的实现

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

  •  shape.has_text_frame :是否有文字
  • shape.text_frame :获取文字框
import pptx
from 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_frame
   print(text_frame.text)

结果如下:

python自动化办公操作PPT的实现

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

import pptx
from 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_frame
    print(text_frame.text)

结果如下:

python自动化办公操作PPT的实现

6)获取Shape中的某个Paragraph

import pptx
from 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_frame
    for paragraph in text_frame.paragraphs:
     print(paragraph.text)
"""
注意:该方法和上述4)中的方法一摸一样。上述方法是直接获取Shpae中的文字内容;
下面这个更灵活,先获取每个Shape,然后在获取每个Shape中的paragraph;
下面方式更好:因为我们可以针对paragraph,写一个判断条件,只获取第几个paragraph;
"""

结果如下:

python自动化办公操作PPT的实现

4、利用python像PPT中写入内容

1)幻灯片模板及占位符的概念

python自动化办公操作PPT的实现

2)怎么自定义母版?

3)什么是版式?

这个概念在下面的效果中,会得以体现。其中prs.slide_layouts[]传入0表示获取的是第一个版式,传入1表示获取的是第二个版式,以此类推下去。

python自动化办公操作PPT的实现

4)添加Slide和内容

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

① 占位符id的确认

import pptx
from 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_format
 print(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为0
13--Picture Placeholder 2--PICTURE (18) 这个表示图片占位符,id为13
14--Text Placeholder 3--BODY (2) 这个表示正文内容占位符,id为14
15--Text Placeholder 4--BODY (2) 这个表示正文内容占位符,id为15
我们一定要先知道每个空格的占位符id,才可以进行下面内容的填充。
"""

效果如下:

python自动化办公操作PPT的实现

② PPT内容的填写

import pptx
from 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")

效果如下:

python自动化办公操作PPT的实现

5)添加段落

① 占位符id的确认

import pptx
from pptx import Presentation

prs = Presentation("finall.pptx")
slide = prs.slides.add_slide(prs.slide_layouts[0])
for shape in slide.placeholders:
 phf = shape.placeholder_format
 print(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_format
 print(f"{phf.idx}--{shape.name}--{phf.type}")
 shape.text = f"{phf.idx}--{shape.name}--{phf.type}"

prs.save("哈哈.pptx")

效果如下:

python自动化办公操作PPT的实现

② 段落的添加

import pptx
from 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.shapes
title_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")

效果如下:

python自动化办公操作PPT的实现

③ 给段落设定层级关系

import pptx
from 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.shapes
title_shape = shapes.title # 这句代码可以改为title_shape = shapes.placeholders[0]
body_shape = shapes.placeholders[1]

title_shape.text = "这是一个标题"

tf = body_shape.text_frame
tf.text = "带圆点的符号1"

p = tf.add_paragraph()
p.text = "带圆点的符号2"
# 原始内容的层级相当于是0,因此这个段落我设置为层级1,下面的段落设置为层级2
p.level = 1

p = tf.add_paragraph()
p.text = "带圆点的符号3"
p.level = 2

prs.save("嘻嘻.pptx")

效果如下:

python自动化办公操作PPT的实现

④ 添加一个文本框 slide.shapes.add_textbox(left, top, width, height)

from pptx import Presentation
from 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_frame
tf.text = "这是一段文本框里面的文字"

p = tf.add_paragraph()
p.text = "这是第二段文字,加粗,字号40"
p.font.bold = True
p.font.size = Pt(40)

prs.save("添加一个文本框0.pptx")

效果如下:

python自动化办公操作PPT的实现

⑤ 添加一个图片

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

第一种展示:

from pptx import Presentation
from 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")

效果如下:

python自动化办公操作PPT的实现

第二种展示:

from pptx import Presentation
from 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")

效果如下:

python自动化办公操作PPT的实现

⑥ 添加表格

shapes.add_table(rows, cols, left, top, width, height)

from pptx import Presentation
from 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, 3
left = top = Cm(5)
width = Cm(18)
height = Cm(3)

table = shapes.add_table(rows, cols, left, top, width, height).table
table.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")

结果如下:

python自动化办公操作PPT的实现

5、PPT文档内容样式批量调整

1)文本框位置的调整

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

from pptx import Presentation
from pptx.util import Cm, Pt
from 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_frame
tf.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")

结果如下:

python自动化办公操作PPT的实现

2)文本框背景颜色调整

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

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_frame
tf.text = "这是一段文本框里面的文字"
# -------------------------------------- #
tf.margin_bottom = Cm(0.1) # 下边距
tf.margin_left = 0 # 下边距
tf.vertical_anchor = MSO_ANCHOR.BOTTOM 
tf.word_wrap = True # 框中的文字自动换行
# -------------------------------------- #
fill = text_box.fill
fill.solid()
# 使用之前一定要导入RGBColor这个库
fill.fore_color.rgb = RGBColor(247, 150, 70)

prs.save("文本框背景色的调整.pptx")

结果如下:

python自动化办公操作PPT的实现

3)文本框边框样式调整

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

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_frame
tf.text = "这是一段文本框里面的文字"
# -------------------------------------- #
tf.margin_bottom = Cm(0.1) # 下边距
tf.margin_left = 0 # 下边距
tf.vertical_anchor = MSO_ANCHOR.BOTTOM 
tf.word_wrap = True # 框中的文字自动换行
# -------------------------------------- #
fill = text_box.fill
fill.solid()
# 使用之前一定要导入RGBColor这个库
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("文本框边框样式调整.pptx")

结果如下:

python自动化办公操作PPT的实现

4)段落对其调整

from pptx import Presentation
from 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_frame
# ---------------------------- #
p = tf.add_paragraph()
p.text = "这是第二段文字"
p.alignment = PP_ALIGN.LEFT

prs.save("段落对其调整.pptx")

当然这里还有一些其他样式的调整,和word很类似,就不一一叙述了。

python自动化办公操作PPT的实现

5)字体样式调整

python自动化办公操作PPT的实现

代码如下:

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_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_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("字体样式调整.pptx")

结果如下:

python自动化办公操作PPT的实现

到此这篇关于python自动化办公操作PPT的实现的文章就介绍到这了,更多相关python操作PPT内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
python实现在无须过多援引的情况下创建字典的方法
Sep 25 Python
Python绑定方法与非绑定方法详解
Aug 18 Python
Python实现简单的用户交互方法详解
Sep 25 Python
Python通过for循环理解迭代器和生成器实例详解
Feb 16 Python
Python编写打字训练小程序
Sep 26 Python
Python 爬虫实现增加播客访问量的方法实现
Oct 31 Python
利用python实现AR教程
Nov 20 Python
使用Python进行防病毒免杀解析
Dec 13 Python
Python如何基于rsa模块实现非对称加密与解密
Jan 03 Python
python图形开发GUI库wxpython使用方法详解
Feb 14 Python
python为QT程序添加图标的方法详解
Mar 09 Python
python 实现两个变量值进行交换的n种操作
Jun 02 Python
20行代码教你用python给证件照换底色的方法示例
Feb 05 #Python
浅谈盘点5种基于Python生成的个性化语音方法
Feb 05 #Python
Python环境搭建过程从安装到Hello World
Feb 05 #Python
Python使用pyenv实现多环境管理
Feb 05 #Python
python中的unittest框架实例详解
Feb 05 #Python
python脚本使用阿里云slb对恶意攻击进行封堵的实现
Feb 04 #Python
用60行代码实现Python自动抢微信红包
Feb 04 #Python
You might like
PHP写杨辉三角实例代码
2011/07/17 PHP
基于preg_match_all采集后数据处理的一点心得笔记(编码转换和正则匹配)
2014/01/31 PHP
Laravel关系模型指定条件查询方法
2019/10/10 PHP
一段多浏览器的"复制到剪贴板"javascript代码
2007/03/27 Javascript
jquery.alert 弹出式复选框实现代码
2009/06/15 Javascript
基于jquery实现复选框全选,反选,全不选等功能
2015/10/16 Javascript
JS前向后瞻正则表达式定义与用法示例
2016/12/27 Javascript
原生js实现新闻列表展开/收起全文功能
2017/01/20 Javascript
基于JavaScript实现轮播图原理及示例
2020/04/10 Javascript
利用node.js实现自动生成前端项目组件的方法详解
2017/07/12 Javascript
js表单序列化判断空值的实例
2017/09/22 Javascript
利用nginx + node在阿里云部署https的步骤详解
2017/12/19 Javascript
小程序封装wx.request请求并创建接口管理文件的实现
2019/04/29 Javascript
Node.js实现用户评论社区功能(体验前后端开发的乐趣)
2019/05/09 Javascript
解决vue项目刷新后,导航菜单高亮显示的位置不对问题
2019/11/01 Javascript
js用正则表达式筛选年月日的实例方法
2021/01/04 Javascript
详解Python中内置的NotImplemented类型的用法
2015/03/31 Python
深入Python函数编程的一些特性
2015/04/13 Python
Python编程实现使用线性回归预测数据
2017/12/07 Python
python sys.argv[]用法实例详解
2018/05/25 Python
关于python之字典的嵌套,递归调用方法
2019/01/21 Python
Django中使用CORS实现跨域请求过程解析
2019/08/05 Python
python读取tif图片时保留其16bit的编码格式实例
2020/01/13 Python
python实现滑雪者小游戏
2020/02/22 Python
Python实现初始化不同的变量类型为空值
2020/06/02 Python
Python基于正则表达式实现计算器功能
2020/07/13 Python
Python和Bash结合在一起的方法
2020/11/13 Python
Python+MySQL随机试卷及答案生成程序的示例代码
2021/02/01 Python
丝绸和人造花卉、植物和树木:Nearly Natural
2018/11/28 全球购物
2014年五一劳动节社区活动总结
2014/04/14 职场文书
建设单位项目负责人任命书
2014/06/06 职场文书
应届本科毕业生求职信
2014/07/23 职场文书
见习报告格式要求
2014/11/04 职场文书
2015中学学校工作总结
2015/07/20 职场文书
Redis5之后版本的高可用集群搭建的实现
2021/04/27 Redis
Nginx配置之实现多台服务器负载均衡
2021/08/02 Servers