Python python-pptx使用
Python-pptx使用
1. Python-pptx简介
是一个Python库,可以用来创建、修改和保存PowerPoint文件。通过使用pptx库,可以自动化地生成各种样式的幻灯片,从而提高工作效率。
2. Python-pptx安装
pip install python-pptx
pip install python-pptx -i https://pypi.tuna.tsinghua.edu.cn/simple
3. Python-pptx使用
pptx库眼中的PPT
presentations, 表示整个ppt文档
sliders. 表示ppt文档的每一页
shapes 方框,在每页幻灯片内插入的方框,可以是形状,也可以是文本框
Paragraph 段落,即Shape中的每一段内容,都称为一个段落
Run 文字块 一般为较少字符


1.自动形状(auto shape)。自动形状就是指矩形、椭圆、箭头等比较规则的预设形状,大概有180多种吧,它们可以填充颜色和添加文本。我们常用到的文本框,也是形状,只不过它有文本但没有填充色而已。 2图片(picture)。没想到吧,图片也是形状,换一个角度看,图片是一个填充色是图片像素颜色而不是rgb纯颜色的形状。 3.图形框架(graphic frame)。图形框架可能会有点抽象,它指的是组织某个形状的框架,我们看不到。但要创建某些形状就需要用到它来组织,比如说创建一个表格、图表、智能图形,这些形状里面都包含了很多其他的各种元素,之所以不乱掉就是因为它们有图形框架在组织和管理。 4.组形(group shape)。这个比较容易理解,就是我们同时选中多个对象,然后可以把它们打成一个组,这样就可以把多个元素当成是一个整体,比如说一起移动、旋转、调整大小,这个组虽然我们看不见,但它是一种形状。 5.线条(line)。这个也好理解吧,虽然在PPT软件里线条也属于预设形状,但线条并没有归为自动形状,因为线条是线性的,有些线条还可以连接形状并在移动形状的时候依然保持连接。 ntent part。这个我也不知道怎么翻译,因为官方文档也没有详细提到,大概是指一些嵌入到PPT的外来xml元素,我们这里也不管那么多了,反正就是形状就对了。
3.1 读取PPT
from pptx import Presentation
# 打开一个PPT文件
prs = Presentation('e:\\test.pptx')
# 遍历幻灯片
for slide in prs.slides:
print(slide)#打印幻灯片
# 遍历幻灯片中的形状
for shape in slide.shapes:
print(shape)#打印幻灯片中的方框
# 判断形状中是否有文本
if shape.has_text_frame:
text_frame = shape.text_frame
# 读取文本内容
print(text_frame.text) #打印方框中的文本
for paragraph in text_frame.paragraphs:
print(paragraph.text) #打印方框中的段落的文本
这段代码将打开名为example.pptx的PowerPoint文件,并遍历其中的所有幻灯片。对于每个幻灯片,它会遍历其中的所有形状,并检查形状是否具有文本框。如果形状有文本框,它将打印出文本框中的文本。
3.2 写PPT
3.2.1 添加slide和内容
- 选择PPT模板 使用ppt自带的模板
prs= Presentation()
prs.slide_layouts[1] #ppt自带了常用的1-48种模板通过index选择对应的模板
使用自定义模板
#使用自定义的模板
prs= Presentation('template.pptx')
- 确认占位符id
#确认占位符id
prs.slide_layouts[0] #获取第一套母版的第一个版式
title 标题类型的占位符 subtitle 副标题类型的占位符 body 正文类型的占位符
3.2.2 添加段落及设置层级关系
首先找到一个shape,向shape的text_frame中添加段落。
slide2 = prs.slides.add_slide(prs.slide_layouts[3])
shapes = slide2.shapes
title_shape=shapes.title
body_shape=shapes.placeholders[1]
title_shape.text='这是我的一个测试'
tf=body_shape.text_frame
tf.text = '项目符号1'
p=tf.add_paragraph()
p.text='项目符号2'
p.level = 1
p=tf.add_paragraph()
p.text='项目符号3'
p.level = 2
3.2.3 添加图片
left = Cm(5)
height = Cm(5.5)
pic = slide2.shapes.add_picture('1.jpg', left, top, height=height) # 设置高度或宽度后会自适应
3.2.4 添加表格
slide3 = prs.slides.add_slide(prs.slide_layouts[3])
shapes = slide3.shapes
shapes.title.text='添加表格'
rows,cols=4,2
left=top=Cm(3)
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(4)
table.rows[0].height= Cm(2)
data = [
['姓名', '成绩'],
['张三', 98],
['李四', 99],
['王五', 100]
]
for row in range(rows):
for col in range(cols):
table.cell(row, col).text = str(data[row][col])
3.2.5 添加文本框及设置格式
left=top=width=height=Cm(10)
text_box=slide2.shapes.add_textbox(left,top,width,height)
tf=text_box.text_frame
tf.text='文本框测试'
tf.vertical_anchor=MSO_VERTICAL_ANCHOR.BOTTOM
p=tf.add_paragraph()
p.text = '增加文字 '
p.font.bold = True
p.font.italic = True
p.font.size=Pt(50)
p.alignment= PP_PARAGRAPH_ALIGNMENT.RIGHT
r=p.add_run()
r.text='run'
fill = text_box.fill
fill.solid()
fill.fore_color.rgb=RGBColor(0,255,255)
line=text_box.line
line.color.rgb=RGBColor(255,0,0)
line.width=Cm(0.5)
