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中用PIL库批量给图片加上序号的教程
May 06 Python
Django中使用group_by的方法
May 26 Python
python中getaddrinfo()基本用法实例分析
Jun 28 Python
在Django的视图中使用form对象的方法
Jul 18 Python
python 输出上个月的月末日期实例
Apr 11 Python
python如何爬取个性签名
Jun 19 Python
python hook监听事件详解
Oct 25 Python
python实现画循环圆
Nov 23 Python
解决python cv2.imread 读取中文路径的图片返回为None的问题
Jun 02 Python
了解一下python内建模块collections
Sep 07 Python
python用tkinter实现一个gui的翻译工具
Oct 26 Python
Python爬虫 简单介绍一下Xpath及使用
Apr 26 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
PHP4 与 MySQL 交互使用
2006/10/09 PHP
php使用cookie保存登录用户名的方法
2015/01/26 PHP
php基于socket实现SMTP发送邮件的方法
2015/03/05 PHP
php flush无效,IIS7下php实时输出的方法
2016/08/25 PHP
PHP实现QQ登录的开原理和实现过程
2018/02/04 PHP
开发跨浏览器javascript常见注意事项
2009/01/01 Javascript
分享一个自定义的console类 让你不再纠结JS中的调试代码的兼容
2012/04/20 Javascript
js模拟select下拉菜单控件的代码
2013/05/08 Javascript
alert和confirm功能介绍
2014/05/21 Javascript
JavaScript中的迭代器和生成器详解
2014/10/29 Javascript
node.js中的buffer.length方法使用说明
2014/12/14 Javascript
javascript操作字符串的原生方法
2014/12/22 Javascript
jQuery中:eq()选择器用法实例
2014/12/29 Javascript
浅谈javascript语法和定时函数
2015/05/03 Javascript
jQuery-1.9.1源码分析系列(十)事件系统之事件体系结构
2015/11/19 Javascript
angularjs表格分页功能详解
2016/01/21 Javascript
javascript cookie的简单应用
2016/02/24 Javascript
Ionic3 UI组件之Gallery Modal详解
2017/06/07 Javascript
Vue源码探究之虚拟节点的实现
2019/04/17 Javascript
教你如何用Node实现API的转发(某音乐)
2019/09/20 Javascript
js this 绑定机制深入详解
2020/04/30 Javascript
antd form表单数据回显操作
2020/11/02 Javascript
Python判断列表是否已排序的各种方法及其性能分析
2016/06/20 Python
python爬虫超时的处理的实例
2018/12/19 Python
Python列表切片常用操作实例解析
2019/12/16 Python
如何基于Python实现电子邮件的发送
2019/12/16 Python
PyCharm2019.3永久激活破解详细图文教程,亲测可用(不定期更新)
2020/10/29 Python
编写strcpy函数
2014/06/24 面试题
传媒专业推荐信范文
2013/11/23 职场文书
应届大学生自荐信
2013/12/05 职场文书
互联网电子商务专业毕业生求职信
2014/03/18 职场文书
爱心募捐通知范文
2015/04/27 职场文书
我的1919观后感
2015/06/03 职场文书
财务人员入职担保书
2015/09/22 职场文书
《用字母表示数》教学反思
2016/02/17 职场文书
css3 利用transform-origin 实现圆点分布在大圆上布局及旋转特效
2021/04/29 HTML / CSS