Python受欢迎的原因之一就是其计算生态丰富,据不完全统计,Python 目前为止有约13万+的第三方库。
本系列将会陆续整理分享一些有趣、有用的第三方库。
-
通过百度网盘获取:
链接:https://pan.baidu.com/s/1FSGLd7aI_UQlCQuovVHc_Q?pwd=mnsj
提取码:mnsj
-
前往GitHub获取:
https://github.com/returu/Python_Ecosystem
-
支持处理任何 Open XML 演示文稿(.pptx 文件),包括其所有元素; -
添加幻灯片; -
填充文本占位符,例如创建项目符号幻灯片; -
在任意位置和大小添加图片到幻灯片; -
添加文本框到幻灯片,操作文本的字体大小和加粗。 -
添加表格到幻灯片; -
添加自选图形(例如多边形、流程图形状等)到幻灯片; -
添加并操作柱状图、条形图、折线图和饼图; -
访问并更改核心文档属性,例如标题和主题; -
其他许多功能……
pip install python-pptx
https://github.com/scanny/python-pptx
以下是一些使用python-pptx操作PowerPoint的示例。
-
示例 1:创建演示文稿:
创建一个包含标题和副标题的 PowerPoint 幻灯片。
from pptx import Presentation
# 创建一个Presentation对象,表示一个新的PowerPoint演示文稿
# 如果需要基于现有的.pptx文件操作,可以传递文件路径
prs = Presentation()
# 选择幻灯片布局
# prs.slide_layouts是一个列表,包含了演示文稿中所有可用的幻灯片布局。每个布局都有不同的占位符(如标题、副标题、内容等)。
# 索引 0 通常代表标题幻灯片布局,也就是演示文稿的封面幻灯片布局。
title_slide_layout = prs.slide_layouts[0]
# 添加一张幻灯片
# 使用add_slide()方法向演示文稿中添加一个幻灯片,并指定其布局为title_slide_layout。
# add_slide() 方法返回一个 Slide 对象,表示新添加的幻灯片。
slide = prs.slides.add_slide(title_slide_layout)
# 获取标题和副标题占位符
# slide.shapes是幻灯片上所有形状的集合,title属性可以直接获取幻灯片的标题占位符
title = slide.shapes.title
# slide.placeholders是幻灯片上所有占位符的集合,索引1通常代表副标题占位符
subtitle = slide.placeholders[1]
# 设置标题和副标题的文本内容
title.text = "Hello, World!"
subtitle.text = "This is a sample presentation."
# 保存演示文稿
prs.save('example_1.pptx')
生成的演示文稿效果:

-
示例 2:项目符号幻灯片示例
创建一个新的 PowerPoint 演示文稿,添加一张带有项目符号列表的幻灯片,设置幻灯片的标题和正文内容,并为正文添加不同级别的项目符号段落。
from pptx import Presentation
prs = Presentation()
# 索引 1 通常代表带有项目符号列表的幻灯片布局
bullet_slide_layout = prs.slide_layouts[1]
# 添加一张幻灯片
slide = prs.slides.add_slide(bullet_slide_layout)
# 获取幻灯片上的形状集合
# slide.shapes是幻灯片上所有形状的集合,包括文本框、图片、图表等
shapes = slide.shapes
# 获取标题和正文占位符
title_shape = shapes.title
body_shape = shapes.placeholders[1]
# 设置标题文本
title_shape.text = 'Adding a Bullet Slide'
# 获取正文文本框并设置初始文本
# text_frame 属性用于获取正文占位符的文本框对象
tf = body_shape.text_frame
# 通过文本框的 text 属性设置正文的第一行文本
tf.text = 'Find the bullet slide layout'
# 添加新的段落并设置项目符号级别
p = tf.add_paragraph()
p.text = 'Use _TextFrame.text for first bullet'
# 设置段落的项目符号级别,level = 1 表示一级项目符号
p.level = 1
p = tf.add_paragraph()
p.text = 'Use _TextFrame.add_paragraph() for subsequent bullets'
# level = 2 表示二级项目符号
p.level = 2
prs.save('example_2.pptx')
生成的演示文稿效果:

-
示例 3:添加文本框
创建一个新的 PowerPoint 演示文稿,添加一张空白幻灯片,在幻灯片上添加一个文本框,并在文本框内设置初始文本、添加新段落,同时对段落的字体样式进行设置。
add_textbox()方法用于在幻灯片上添加一个文本框,该方法接受四个参数,分别是文本框的左偏移量、上偏移量、宽度和高度。
from pptx import Presentation
# Inches 用于以英寸为单位指定长度,Pt 用于以磅为单位指定字体大小
from pptx.util import Inches, Pt
prs = Presentation()
# 索引 6 通常对应空白幻灯片布局,即没有预设标题、正文等占位符的幻灯片
blank_slide_layout = prs.slide_layouts[6]
# 添加幻灯片
slide = prs.slides.add_slide(blank_slide_layout)
# 定义文本框的位置和大小,这里将文本框的左偏移量、上偏移量、宽度和高度都设置为 1 英寸
left = top = width = height = Inches(1)
# 使用 add_textbox() 方法添加文本框到幻灯片
txBox = slide.shapes.add_textbox(left, top, width, height)
# text_frame属性用于获取文本框的文本框架对象,通过该对象可以对文本框内的文本进行操作,如设置文本内容、添加段落等。
tf = txBox.text_frame
# 设置文本框的初始文本
tf.text = "This is text inside a textbox"
# 添加新段落并设置字体样式
p = tf.add_paragraph()
p.text = "This is a second paragraph that's bold"
p.font.bold = True # 字体设置为粗体
p = tf.add_paragraph()
p.text = "This is a third paragraph that's big"
p.font.size = Pt(40) # 字体大小设置为 40 磅
prs.save('example_3.pptx')
生成的演示文稿效果:

-
示例 4:插入图片
创建一个新的 PowerPoint 演示文稿,添加一张空白幻灯片,然后在幻灯片上插入两张相同的图片。
add_picture()方法用于在幻灯片上插入图片,该方法接受图片文件路径、图片的左偏移量和上偏移量作为参数,返回插入的图片对象。
from pptx import Presentation
from pptx.util import Inches
# 要插入到幻灯片中的图片文件的路径
img_1_path = '1.jpg'
img_2_path = '2.jpg'
prs = Presentation()
blank_slide_layout = prs.slide_layouts[6]
slide = prs.slides.add_slide(blank_slide_layout)
# 插入第一张图片
# add_picture()方法用于在幻灯片上插入图片。该方法接受图片文件路径、图片的左偏移量和上偏移量作为参数,返回插入的图片对象
left = top = Inches(0.5)
pic = slide.shapes.add_picture(img_1_path, left, top)
# 插入第二张图片
left = Inches(5)
height = Inches(4.5) # 图片的高度
pic = slide.shapes.add_picture(img_2_path, left, top, height=height)
prs.save('example_4.pptx')
生成的演示文稿效果:

-
示例 5:插入形状
创建一个新的 PowerPoint 演示文稿,添加一张仅包含标题的幻灯片,在幻灯片上添加一个五边形形状和四个箭头形状,并为每个形状设置相应的文本。
add_shape()方法用于在幻灯片上添加各种预设的自动形状,如矩形、圆形、三角形等。该方法接受形状的类型(通常使用pptx.enum.shapes.MSO_SHAPE枚举类中的常量来表示)、左偏移量、上偏移量、宽度和高度作为参数。该方法返回一个表示所添加形状的 Shape 对象,通过这个对象可以进一步对形状进行设置,如设置文本、填充颜色、边框样式等。
以下是一些常见的 MSO_SHAPE 枚举常量及其对应的形状:
-
MSO_SHAPE.RECTANGLE
:标准的矩形形状。
-
MSO_SHAPE.ROUNDED_RECTANGLE
:带有圆角的矩形。
-
MSO_SHAPE.SNIP_RECTANGLE
:裁剪过的矩形,通常有一个角被切掉。
-
MSO_SHAPE.CIRCLE
:正圆形。
-
MSO_SHAPE.ELLIPSE
:椭圆形。
-
MSO_SHAPE.TRIANGLE
:普通的三角形。
-
MSO_SHAPE.RIGHT_TRIANGLE
:直角三角形。
-
MSO_SHAPE.LEFT_ARROW
:向左的单箭头。
-
MSO_SHAPE.RIGHT_ARROW
:向右的单箭头。
-
MSO_SHAPE.UP_ARROW
:向上的单箭头。
-
MSO_SHAPE.DOWN_ARROW
:向下的单箭头。
-
MSO_SHAPE.BIDIRECTIONAL_ARROW
:双向箭头,两端都有箭头。
-
MSO_SHAPE.CHEVRON
:V 形箭头,常用于流程图中的步骤指示。
-
MSO_SHAPE.DIAMOND_ARROW
:菱形箭头。
-
MSO_SHAPE.STAR_5_POINT
:五角星形。
-
MSO_SHAPE.STAR_6_POINT
:六角星形。
-
MSO_SHAPE.STAR_7_POINT
:七角星形,以此类推,还有更多角的星形。
-
MSO_SHAPE.PENTAGON
:五边形。
-
MSO_SHAPE.HEXAGON
:六边形。
-
MSO_SHAPE.PROCESS
:标准的流程图矩形框,通常用于表示流程中的操作步骤。
-
MSO_SHAPE
.DECISION
:菱形决策框,用于表示流程中的判断点。
-
MSO_SHAPE.DOCUMENT
:文档形状,通常表示数据或信息的存储。
-
MSO_SHAPE.DATABASE
:数据库形状,用于表示数据存储源。
-
MSO_SHAPE.SMILEY_FACE
:笑脸形状。
-
MSO_SHAPE.HEART
:心形。
-
MSO_SHAPE.LIGHTNING_BOLT
:闪电形状。
-
MSO_SHAPE.CLOUD
:云朵形状。
from pptx import Presentation
# MSO_SHAPE枚举类,它包含了PowerPoint中各种预设的自动形状类型,如矩形、圆形、三角形等,可用于在幻灯片中添加特定形状
from pptx.enum.shapes import MSO_SHAPE
from pptx.util import Inches
prs = Presentation()
# 索引 5 通常对应仅包含标题的幻灯片布局
title_only_slide_layout = prs.slide_layouts[5]
slide = prs.slides.add_slide(title_only_slide_layout)
# 获取幻灯片上所有形状的集合,、方便后续添加和操作幻灯片上的形状
shapes = slide.shapes
# 设置幻灯片标题
shapes.title.text = 'Adding an AutoShape'
# 定义形状的位置和大小
left = Inches(0.93)
top = Inches(3.0)
width = Inches(1.75)
height = Inches(1.0)
# 使用 add_shape() 方法添加形状(五边形)并设置文本
# MSO_SHAPE.PENTAGON 表示要添加的形状类型为五边形
shape = shapes.add_shape(MSO_SHAPE.PENTAGON, left, top, width, height)
shape.text = 'Step 1'
# 调整下一个形状的位置和宽度
# 计算下一个形状的左偏移量,将当前形状的左偏移量加上其宽度,再减去 0.4 英寸,以实现形状之间的间隔
left = left + width - Inches(0.4)
# 将后续要添加的形状( Chevron 形状,即箭头形状)的宽度设置为 2 英寸
width = Inches(2.0)
# 循环添加后续形状(箭头形状)
for n in range(2, 6):
shape = shapes.add_shape(MSO_SHAPE.CHEVRON, left, top, width, height)
shape.text = 'Step %d' % n
left = left + width - Inches(0.4)
prs.save('example_5.pptx')
生成的演示文稿效果:

-
示例 6:插入表格
add_table()方法用于在幻灯片上添加表格。该方法接受表格的行数、列数、左偏移量、上偏移量、宽度和高度作为参数。该方法返回的是一个包含表格的形状对象,通过 .table 属性可以获取实际的表格对象。
from pptx import Presentation
from pptx.util import Inches
prs = Presentation()
title_only_slide_layout = prs.slide_layouts[5]
slide = prs.slides.add_slide(title_only_slide_layout)
shapes = slide.shapes
shapes.title.text = 'Adding a Table'
# 定义表格的参数
rows = cols = 2 # 行数和列数均为 2
left = top = Inches(2.0) # 表格距离幻灯片左侧和顶部的距离
width = Inches(6.0) # 表格的宽度
height = Inches(0.8) # 表格的高度
# add_table() 方法用于在幻灯片上添加表格。该方法接受表格的行数、列数、左偏移量、上偏移量、宽度和高度作为参数
# add_table() 方法返回的是一个包含表格的形状对象,通过 .table 属性可以获取实际的表格对象,并将其赋值给 table 变量,后续可对该表格进行具体的设置和操作
table = shapes.add_table(rows, cols, left, top, width, height).table
# 设置表格列宽
table.columns[0].width = Inches(2.0)
table.columns[1].width = Inches(4.0)
# 写入表格列标题
table.cell(0, 0).text = 'Foo'
table.cell(0, 1).text = 'Bar'
# 写入表格正文内容
table.cell(1, 0).text = 'Baz'
table.cell(1, 1).text = 'Qux'
prs.save('example_6.pptx')
生成的演示文稿效果:

-
示例 7:从演示文稿中的幻灯片中提取所有文本
打开一个现有的 PowerPoint 演示文稿,遍历其中的所有幻灯片、形状、段落和文本运行,将每个文本运行的内容提取出来并存储在一个列表中,最后返回这个列表。
from pptx import Presentation
# 打开现有的演示文稿
prs = Presentation('example_1.pptx')
# 创建一个空列表 text_runs,用于存储演示文稿中所有文本运行(text run)的内容。文本运行是指具有相同格式设置(如字体、颜色、大小等)的一段连续文本
text_runs = []
# 遍历演示文稿中的幻灯片、形状、段落和文本运行
# 遍历演示文稿中的每一张幻灯片
for slide in prs.slides:
# 遍历当前幻灯片上的每一个形状。形状可以是文本框、图片、图表等
for shape in slide.shapes:
# 检查当前形状是否包含文本框
if not shape.has_text_frame:
continue
# 遍历文本框中的每一个段落
for paragraph in shape.text_frame.paragraphs:
# 遍历段落中的每一个文本运行
for run in paragraph.runs:
# 将文本运行的内容添加到列表中
text_runs.append(run.text)
text_runs
# 输出:['Hello, World!', 'This is a sample presentation.']
更多内容可以前往官方文档查看:
https://python-pptx.readthedocs.io/en/latest/


本篇文章来源于微信公众号: 码农设计师