python-pptx学习总结
时间:2022-10-01 11:00:00
最近ppt排版太麻烦了。每次都要贴截图,不容易对齐。看起来很不舒服。一旦结果更新,就要重新贴截图。我觉得太麻烦了。我以前知道这个python-pptx,我能自动排版图片吗?答案是肯定的。以下是我的学习记录。
安装python-pptx
网上有很多教程,就不说了,
参考
https://blog.csdn.net/weixin_42750611/article/details/108029796
https://zhuanlan.zhihu.com/p/344862384
python pptx 操作实例1(新建ppt)
from pptx import Presentation ppt=Presentation() ppt.slides.add_slide(ppt.slide_layouts[0]) ppt.save("测试1.pptx") ## 添加个换灯片
python pptx 基本操作
from pptx import Presentation prs = Presentation('test_template.pptx') for slide in prs.slides: print(slide) from pptx import Presentation prs = Presentation('test_template.pptx') for slide in prs.slides: for shape in slide.shapes: print(shape) # 获取所有Slide中的内容 from pptx import Presentation prs = Presentation('test_template.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) # 获取某一页Slide中的内容 from pptx import Presentation prs = Presentation('test_template.pptx') for i, slide in enumerate(prs.slides): if i == 2:
for shape in slide.shapes:
if shape.has_text_frame:
text_frame = shape.text_frame
print(text_frame.text)
报告
报告
python pptx使用案例2(占位符使用)
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
from pptx import Presentation
prs = Presentation()
title_slide_layout = prs.slide_layouts[0]
slide = prs.slides.add_slide(title_slide_layout)
title = slide.shapes.title
subtitle = slide.placeholders[1]
title.text = "Hello, World!"
subtitle.text = "python-pptx 可以轻松制作powerpoint!"
prs.save('test1.pptx')
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-u5hI1tJt-1657114192007)(attachment:image.png)]
from pptx import Presentation
prs = Presentation()
bullet_slide_layout = prs.slide_layouts[1]
slide = prs.slides.add_slide(bullet_slide_layout)
shapes = slide.shapes
title_shape = shapes.title
body_shape = shapes.placeholders[1]
title_shape.text = 'Adding a Bullet Slide'
tf = body_shape.text_frame
tf.text = 'Find the bullet slide layout'
p = tf.add_paragraph()
p.text = 'Use _TextFrame.text for first bullet'
p.level = 1
p = tf.add_paragraph()
p.text = 'Use _TextFrame.add_paragraph() for subsequent bullets'
p.level = 2
prs.save('test2.pptx')
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yZO45EeS-1657114192008)(attachment:image.png)]
python-pptx使用案例3 插入形状
from pptx import Presentation
from pptx.util import Pt,Cm
from pptx.dml.color import RGBColor
from pptx.enum.text import PP_ALIGN
from pptx.enum.shapes import MSO_SHAPE
ppt = Presentation(r'测试1.pptx')
slide = ppt.slides[0]#更改第一张
# 添加矩形
# 设置位置以及大小
left, top, width, height = Cm(0), Cm(0), Cm(2), Cm(2)
# 添加形状
rectangle = slide.shapes.add_shape(MSO_SHAPE.RECTANGLE, left, top, width, height)
# 设置背景填充
rectangle.fill.solid()
# 设置背景颜色
rectangle.fill.fore_color.rgb = RGBColor(34, 134, 165)
# 设置边框颜色
rectangle.line.color.rgb = RGBColor(34, 134, 165)
ppt.save('测试1.pptx')
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YkTq828L-1657114192008)(attachment:image.png)]
python pptx使用案例3(插入图片)
from pptx import Presentation
# ppt = Presentation(r'测试1.pptx')
# slide=ppt.slides.add_slide(ppt.slide_layouts[0])
# left = top = Cm(3)
# pic = slide.shapes.add_picture('./0.png',left,top)
ppt = Presentation(r'测试1.pptx')# 图片太大了
slide = ppt.slides[1]#更改第一张
left = top = Cm(0)
pic = slide.shapes.add_picture('./0.png',left,top)
ppt.save("测试1.pptx")
## 添加了一张换灯片
############ 修改位置
from pptx import Presentation
# ppt = Presentation(r'测试1.pptx')
# slide=ppt.slides.add_slide(ppt.slide_layouts[0])
# left = top = Cm(3)
# pic = slide.shapes.add_picture('./0.png',left,top)
ppt = Presentation(r'测试1.pptx')# 图片太大了
slide = ppt.slides[2]#更改第一张
left = top = Cm(0)
height=Cm(3)
pic = slide.shapes.add_picture('./0.png',left,top,height=height)
ppt.save("测试1.pptx")
## 添加了一张换灯片
from pptx import Presentation
ppt = Presentation(r'测试1.pptx')
slide=ppt.slides.add_slide(ppt.slide_layouts[0])
left = top = Cm(3)
width=Cm(5)
height=Cm(1)
pic = slide.shapes.add_picture('./0.png',left,top,width=width,height=height)
ppt.save("测试1.pptx")
python pptx使用案例4(添加表格)
ppt = Presentation(r'测试1.pptx')
slide=ppt.slides.add_slide(ppt.slide_layouts[0])
rows,cols = 4,2
left = top =Cm(5)
width = Cm(18)
height = Cm(3)
table = slide.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 = [
['姓名','成绩'],
['李雷',99],
['韩梅梅', 92],
['马东梅', 92],
]
for row in range(rows):
for col in range(cols):
table.cell(row,col).text =str(data[row][col])
ppt.save("测试1.pptx")
########################################################
ppt = Presentation(r'测试1.pptx')
slide=ppt.slides.add_slide(ppt.slide_layouts[0])
rows,cols = 4,2
left = top =Cm(5)
width = Cm(18)
height = Cm(3)
table = slide.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 = [
['姓名','成绩'],
['李雷',99],
['韩梅梅', 92],
['马东梅', 92],
]
for row in range(rows):
for col in range(cols):
table.cell(row,col).text =str(data[row][col])
ppt.save("测试1.pptx")
python -pptx使用案例5(添加图片和表格)
# 加载库
import os
from pptx import Presentation
from pptx.util import Cm, Inches, Pt
from pptx.enum.text import PP_ALIGN
from pptx.dml.color import RGBColor
# 设置路径
# 实例化 ppt 文档对象
prs = Presentation()
# 插入幻灯片
blank_slide = prs.slide_layouts[6]
slide_1 = prs.slides.add_slide(blank_slide)
# 添加图片
img_name = 'shenma.jpeg'
## 中央主图
pic = slide_1.shapes.add_picture(image_file=img_name,
left=Inches(1),
top=Inches(1),
width=Inches(8),
height=Inches(5)
)
## 左上角小图
slide_1.shapes.add_picture(image_file=img_name,
left=Inches(0.5),
top=Inches(0.5),
width=Inches(3),
height=Inches(1.5)
)
## 右上角小图
slide_1.shapes.add_picture(image_file=img_name,
left=Inches(7.5),
top=Inches(0.5),
width=Inches(3),
height=Inches(1.5)
)
## 左下角小图
slide_1.shapes.add_picture(image_file=img_name,
left=Inches(0.5),
top=Inches(5),
width=Inches(3),
height=Inches(1.5)
)
# 右下角小图
slide_1.shapes.add_picture(image_file=img_name,
left=Inches(7.5),
top=Inches(5),
width=Inches(3),
height=Inches(1.5)
)
# 添加文本框
textbox= slide_1.shapes.add_textbox(left=Inches(1),
top=Inches(6),
width=Inches(8),
height=Inches(2)
)
## 向文本框加入文字
tf = textbox.text_frame
para = tf.add_paragraph() # 添加段落
para.text = '神马都是浮云!!!'
para.alignment = PP_ALIGN.CENTER # 居中
## 设置字体
font = para.font
font.size = Pt(36) # 大小
font.name = '华文彩云' # 字体
font.bold = True # 加粗
font.italic = True # 倾斜
font.color.rgb = RGBColor(225, 225, 0) # 黄色
# 保存 ppt
prs.save('测试3.pptx')
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7zcwtkv4-1657114192008)(attachment:image.png)]
python-pptx使用案例6(改变字体)
# 加载库
import os
from pptx import Presentation
from pptx.util import Cm, Inches, Pt
from pptx.enum.text import PP_ALIGN
from pptx.dml.color import RGBColor
# 设置路径
# 实例化 ppt 文档对象
prs = Presentation()
# 插入幻灯片
blank_slide = prs.slide_layouts[6]
slide_1 = prs.slides.add_slide(blank_slide)
# 添加图片
img_name = 'shenma.jpeg'
## 中央主图
## 左上角小图
slide_1.shapes.add_picture(image_file=img_name,
left=Cm(0),
top=Cm(0.5),
width=Cm(10),
height=Cm(3)
)
slide_1.shapes.add_picture(image_file=img_name,
left=Cm(0),
top=Cm(4),
width=Cm(10),
height=Cm(3)
)
slide_1.shapes.add_picture(image_file=img_name,
left=Cm(11),
top=Cm(0.5),
width=Cm(10),
height=Cm(3)
)
slide_1.shapes.add_picture(image_file=img_name,
left=Cm(11),
top=Cm(4),
width=Cm(10),
height=Cm(3)
)
# 添加文本框
# textbox= slide_1.shapes.add_textbox(left=Cm(0),
# top=Cm(0),
# width=Cm(10),
# height=Cm(0.5)
# )
## 向文本框加入文字
left = top = Cm(0)
width=Cm(10)
height=Cm(0.5)
txBox = slide_1.shapes.add_textbox(left, top, width, height)
tf = txBox.text_frame
p = tf.paragraphs[0]
run = p.add_run()
run.text = "Hello World"
font = run.font
#font.name = 'Calibri'
font.name="Times New Roman"
font.bold = True # 加粗
font.size = Pt(6)
left= Cm(11)
top = Cm(0)
width=Cm(10)
height=Cm(0.5)
txBox = slide_1.shapes.add_textbox(left, top, width, height)
tf = txBox.text_frame
p = tf.paragraphs[0]
run = p.add_run()
run.text = "Hello World2"
font = run.font
#font.name = 'Calibri'
font.name="Times New Roman"
font.bold = True # 加粗
font.size = Pt(6)
# 保存 ppt
prs.save('测试4.pptx')
python-pptx使用案例7(单独测试文本框)
import os
from pptx import Presentation
from pptx.util import Inches, Pt
prs = Presentation()
blank_slide_layout = prs.slide_layouts[6]
slide = prs.slides.add_slide(blank_slide_layout)
shapes = slide.shapes
left = top = Cm(0)
width=Cm(10)
height=Cm(0.5)
txBox = slide.shapes.add_textbox(left, top, width, height)
tf = txBox.text_frame
p = tf.paragraphs[0]
run = p.add_run()
run.text = "Hello World"
font = run.font
font.name = 'Times New Roman'
font.size = Pt(6)
prs.save('测试5.pptx')
python pptx使用案例8(自动创建多个文本框)
# 加载库 import os from pptx import Presentation from pptx.util import Cm, Inches, Pt from pptx.enum.text import PP_ALIGN from pptx.dml.color import RGBColor # 设置路径 # 实例化 ppt 文档对象 prs = Presentation() blank_slide = prs.slide_layouts[6] ppt = prs.slides.add_slide(blank_slide) # 模版图片 img_name = 'shenma.jpeg' ######################### setting parmeters ####################### nrow=5 ncol=3 textbox_height=0.5 textbox_width=10 pic_height=10 pic_width=10 margin_width=1 margin_height=0.5 box_left=0 box_top =0 ############################################## text_list=["method"+str(i) for i in range(1,nrow*ncol+1)] print(text_list) for i in range(nrow): for j in range(ncol): ind=i*ncol+j print(ind) print("====================") left=Cm(j*textbox_width+j*margin_width) top=Cm(i*textbox_height+i*margin_height+i*pic_height)## 加入图片的高度 width=Cm(textbox_width) height=Cm(textbox_height) txBox = ppt.shapes.add_textbox(left, top, width, height) tf = txBox.text_frame p = tf