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 相关文章推荐
SublimeText 2编译python出错的解决方法(The system cannot find the file specified)
Nov 27 Python
python 日志增量抓取实现方法
Apr 28 Python
pytorch 把MNIST数据集转换成图片和txt的方法
May 20 Python
使用python存储网页上的图片实例
May 22 Python
Python hashlib模块用法实例分析
Jun 12 Python
Python高级特性切片(Slice)操作详解
Sep 27 Python
python中时间、日期、时间戳的转换的实现方法
Jul 06 Python
如何理解python中数字列表
May 29 Python
python语言是免费还是收费的?
Jun 15 Python
什么是python的自省
Jun 21 Python
PyTorch: Softmax多分类实战操作
Jul 07 Python
opencv 图像礼帽和图像黑帽的实现
Jul 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中文字符截取防乱码
2008/03/28 PHP
重新封装zend_soap实现http连接安全认证的php代码
2011/01/12 PHP
php汉字转拼音的示例
2014/02/27 PHP
wampserver改变默认网站目录的办法
2015/08/05 PHP
简单了解WordPress开发中update_option()函数的用法
2016/01/11 PHP
VSCode+PHPstudy配置PHP开发环境的步骤详解
2020/08/20 PHP
javascript void(0)的妙用
2009/10/21 Javascript
JavaScript中的字符串操作详解
2013/11/12 Javascript
js中replace的用法总结
2013/12/27 Javascript
JS实现对中文字符串进行utf-8的Base64编码的方法(使其与Java编码相同)
2016/06/21 Javascript
javascript 判断是否是微信浏览器的方法
2016/10/09 Javascript
详解Vue 事件驱动和依赖追踪
2017/04/22 Javascript
JS验证码实现代码
2017/09/14 Javascript
input 标签实现输入框带提示文字效果(两种方法)
2017/10/09 Javascript
利用vue开发一个所谓的数独方法实例
2017/12/21 Javascript
对Vue beforeRouteEnter 的next执行时机详解
2018/08/25 Javascript
js实现单元格拖拽效果
2020/02/10 Javascript
Openlayers3实现车辆轨迹回放功能
2020/09/29 Javascript
关于matplotlib-legend 位置属性 loc 使用说明
2020/05/16 Python
python实现猜数游戏(保存游戏记录)
2020/06/22 Python
python 星号(*)的多种用途
2020/09/21 Python
CSS3 实现的缩略图悬停效果
2020/12/09 HTML / CSS
HTML5 在canvas中绘制文本附效果图
2014/06/23 HTML / CSS
巴基斯坦电子产品购物网站:Home Shopping
2017/09/14 全球购物
美国婚礼礼品网站:MyWeddingFavors
2018/09/26 全球购物
一些网络技术方面的面试题
2014/05/01 面试题
this关键字的作用
2016/01/30 面试题
Hibernate持久层技术
2013/12/16 面试题
财务负责人任命书
2014/06/06 职场文书
个人剖析材料及整改措施
2014/10/07 职场文书
志愿服务心得体会
2016/01/15 职场文书
导游词之蓬莱长岛
2019/12/17 职场文书
如何用Node.js编写内存效率高的应用程序
2021/04/30 Javascript
Python数据分析之pandas读取数据
2021/06/02 Python
MySQL系列之一 MariaDB-server安装
2021/07/02 MySQL
i7 6700处理器相当于i5几代
2022/04/19 数码科技