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算法应用实战之队列详解
Feb 04 Python
python遍历文件夹下所有excel文件
Jan 03 Python
Python实现快速计算词频功能示例
Jun 25 Python
Python 200行代码实现一个滑动验证码过程详解
Jul 11 Python
python找出因数与质因数的方法
Jul 25 Python
python函数修饰符@的使用方法解析
Sep 02 Python
python encrypt 实现AES加密的实例详解
Feb 20 Python
python读写文件write和flush的实现方式
Feb 21 Python
python subprocess pipe 实时输出日志的操作
Dec 05 Python
python爬取youtube视频的示例代码
Mar 03 Python
pytorch加载预训练模型与自己模型不匹配的解决方案
May 13 Python
python之json文件转xml文件案例讲解
Aug 07 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 第二节 数据类型之字符串类型
2012/04/28 PHP
php标签云的实现代码
2012/10/10 PHP
PHP中实现生成静态文件的方法缓解服务器压力
2014/01/07 PHP
php 魔术常量详解及实例代码
2016/12/04 PHP
详解yii2实现分库分表的方案与思路
2017/02/03 PHP
jQuery.ajax 用户登录验证代码
2010/10/29 Javascript
editable.js 基于jquery的表格的编辑插件
2011/10/24 Javascript
JS动态获取当前时间,并写到特定的区域
2013/05/03 Javascript
JavaScript中的原型和继承详解(图文)
2014/07/18 Javascript
JavaScript使用FileSystemObject对象写入文本文件内容的方法
2015/08/05 Javascript
js实现卡片式项目管理界面UI设计效果
2015/12/08 Javascript
javascript监听页面刷新和页面关闭事件方法详解
2017/01/09 Javascript
JavaScript实现多叉树的递归遍历和非递归遍历算法操作示例
2018/02/08 Javascript
jQuery中复合选择器简单用法示例
2018/03/31 jQuery
vue微信分享出来的链接点开是首页问题的解决方法
2018/11/28 Javascript
JS实现json数组排序操作实例分析
2019/10/28 Javascript
[00:43]拉比克至宝魔导师密钥展示
2018/12/20 DOTA
Python简单实现子网掩码转换的方法
2016/04/13 Python
Python简单遍历字典及删除元素的方法
2016/09/18 Python
Python利用BeautifulSoup解析Html的方法示例
2017/07/30 Python
Python可变参数*args和**kwargs用法实例小结
2018/04/27 Python
详解Python中的分组函数groupby和itertools)
2018/07/11 Python
Python3.7 dataclass使用指南小结
2019/02/22 Python
python实现的分析并统计nginx日志数据功能示例
2019/12/21 Python
tensorflow 初始化未初始化的变量实例
2020/02/06 Python
python实现飞机大战项目
2020/03/11 Python
Python3 socket即时通讯脚本实现代码实例(threading多线程)
2020/06/01 Python
详解BeautifulSoup获取特定标签下内容的方法
2020/12/07 Python
分享29个基于Bootstrap的HTML5响应式网页设计模板
2015/11/19 HTML / CSS
4s店机修工岗位职责
2013/12/20 职场文书
小学生读书活动总结
2014/06/30 职场文书
巾帼志愿者活动方案
2014/08/17 职场文书
先进事迹演讲稿
2014/09/01 职场文书
三严三实民主生活会发言稿
2014/10/13 职场文书
2015年乡镇工会工作总结
2015/05/19 职场文书
PyTorch 如何检查模型梯度是否可导
2021/06/05 Python