1、python-pptx模块简介

使用python操作PPT,需要使用的模块就是python-pptx,下面来对该模块做一个简单的介绍。

这里提前做一个说明:python操作PPT,最好是我们提前设计好自己的一套样式,然后利用进行python进行内容的获取和填充(最主要的功能!),最好是不用使用python代码操作PPT的格式,格式的修改肯定不如我们直接在PPT中修改方便。可以创建、修改PPT(.pptx)文件

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

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的结构,这个对于之后代码的编写很有帮助。

2)获取Slide

from pptx import Presentation

prs = Presentation("统计学习方法PPT.pptx")

for slide in prs.slides:

print(slide)

结果如下:

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对象,并不能看出什么,接着往下看。

"""

结果如下:

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)

结果如下:

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)

结果如下:

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;

"""

结果如下:

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

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

2)怎么自定义母版?

3)什么是版式?

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

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,才可以进行下面内容的填充。

"""

效果如下:

② 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")

效果如下:

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")

效果如下:

② 段落的添加

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")

效果如下:

③ 给段落设定层级关系

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")

效果如下:

④ 添加一个文本框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")

效果如下:

⑤ 添加一个图片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")

效果如下:

第二种展示:

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")

效果如下:

⑥ 添加表格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")

结果如下:

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")

结果如下:

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")

结果如下:

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")

结果如下:

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很类似,就不一一叙述了。

5)字体样式调整

代码如下:

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中的p dml sel_详解 Python 操作 PPT 的各种骚操作!相关推荐

  1. python中pandas安装视频教程_详解Python中pandas的安装操作说明(傻瓜版)

    很多人来问我pandas的安装(python数据分析里面的必修课) 步骤如下: 安装python的时候,把路径加到系统里,这样,随时可以用pip 路径添加方法: 查找路径: 路径1: 2.例如: 即: ...

  2. [转载] python中for语句用法_详解Python中for循环的使用_python

    参考链接: 在Python中将else条件语句与for循环一起使用 这篇文章主要介绍了Python中for循环的使用,来自于IBM官方网站技术文档,需要的朋友可以参考下 for 循环 本系列前面 &q ...

  3. python中break怎么用_详解Python中break语句的用法

    详解Python中break语句的用法 在Python中的break语句终止当前循环,继续执行下一个语句,就像C语言中的break一样. break最常见的用途是当一些外部条件被触发,需要从一个循环中 ...

  4. python中for语句用法_详解Python中for循环的使用_python

    这篇文章主要介绍了Python中for循环的使用,来自于IBM官方网站技术文档,需要的朋友可以参考下 for 循环 本系列前面 "探索 Python,第 5 部分:用 Python 编程&q ...

  5. python中re模块的span,详解Python正则表达式re模块

    正则是处理字符串最常用的方法,我们编码中到处可见正则的身影. 正则大同小异,python 中的正则跟其他语言相比略有差异: 1.替换字符串时,替换的字符串可以是一个函数 2.split 函数可以指定分 ...

  6. python中break的作用_详解Python中break语句的用法

    在Python中的break语句终止当前循环,继续执行下一个语句,就像C语言中的break一样. break最常见的用途是当一些外部条件被触发,需要从一个循环中断退出. break语句可以在while ...

  7. python中str.format用法_详解Python中的str.format方法

    字符串的内置方法大致有40来个,但是一些常用的其实就那么20几个,而且里面还有类似的用法,区分度高比如:isalpha,isalnum,isdigit,还有一些无时不刻都会用到的split切分,joi ...

  8. python平方数迭代器_对python中的高效迭代器函数详解

    python中内置的库中有个itertools,可以满足我们在编程中绝大多数需要迭代的场合,当然也可以自己造轮子,但是有现成的好用的轮子不妨也学习一下,看哪个用的顺手~ 首先还是要先import一下: ...

  9. Python中的select、epoll详解

    Python中的select.epoll详解 文章目录 Python中的select.epoll详解 一.select 1.相关概念 2.select的特性 1.那么单进程是如何实现多并发的呢??? ...

最新文章

  1. 特斯拉线圈的阻抗分析
  2. pth大小为0,占用空间不为0
  3. 可以编程的 “骰子” :带 LED、陀螺仪,WiFi!
  4. 这相册一出手,哪个长辈搞不定?
  5. PyQt4重写事件处理方法
  6. 计算机学院迎新活动总结,大学迎新活动总结
  7. cv mat 灰度值和_c++ 访问OpenCV中灰度图像的像素值
  8. getmany返回值 gjson_序列化多个模型并在一个JSON响应中发送所有Django Rest框架
  9. MySQL学习之路 一 : MySQL 5.7.19 源码安装
  10. mysql 5.5 编译参数_mysql5.5编译安装
  11. Unity整体与单个缩放比例
  12. 简单的学生管理系统详解(附源码)
  13. 如何对接GN EDI系统?
  14. AT24C02/04/08 地址理解
  15. 恢复手机qq删除的收藏表情
  16. 亿图脑图-MindMaster-思维导图及亿图图示会员-史上超值活动
  17. 【Operamasks-UI】可编辑表格insertRow和deleteRow遇到空表格时的问题
  18. 如果编程语言是一门武功绝学,那么汇编、C语言······
  19. 关于网页图标添加shortcut icon与icon
  20. cairo填充_cairo 图形库

热门文章

  1. CPU缓存与性能优化
  2. Web页面调用本地客户端程序并传参
  3. 语音助理究竟好不好用?看看国外消费者怎么说 | 精选
  4. 《中国人民解放军文职人员条例》2023版解读
  5. C# winform窗体调用摄像头设备拍照
  6. hammer.js的基本使用
  7. 计算机专业毕业祝福语,毕业祝福语
  8. 三国志战略版:关羽、姜维、关妹的超强新T1蜀骑
  9. 程序员的故事 010 上网行为管理系统
  10. 【Git】IDEA整合Git详细步骤 — IDEA如何配置Git忽略文件