<>1. PPT自动化
<>1.1 PPT自动化场景
* 批量PPT的创建与修改
* 大量图片、文字的写入
* 准确无误的插入图表等数据
<>1.2 pptx模块介绍
*
python-pptx为Python第三方模块,用于自动化生成和更新PowerPoint(.pptx)文件
*
安装:pip install python-pptx(python-pptx依赖的python版本为:2.6、2.7、3.3、3.4、3.6)
*
查看:pip list
*
导入:import pptx
<>2. python-pptx模块的使用
<>2.1 写入文本到PPT
import pptx from pptx.util import Inches # 步骤一:得到演示文稿的对象 prs = pptx.
Presentation('test.pptx') # 以test.pptx为模板 # 步骤二:写入操作 # 设置幻灯片布局 slide = prs.
slides.add_slide(prs.slide_layouts[0]) #
prs.slides.add_slide(prs.slide_layouts[1]) #
prs.slides.add_slide(prs.slide_layouts[2]) # 删除幻灯片 # print(len(prs.slides)) #
del prs.slides._sldIdLst[1] # 根据索引删除,删除第2张幻灯片 # print(len(prs.slides)) # 添加文本框
text1= slide.shapes.add_textbox(Inches(5), Inches(5), Inches(5), Inches(5))
text1.text = "这是文本框" # 添加段落 p1 = text1.text_frame.add_paragraph() p1.text =
"我是段落1" title_shape = slide.shapes.title title_shape.text = '标题1' slide.shapes.
placeholders[1].text = '标题2' # 添加文本 p1.add_run().text = "end" # 步骤三:保存PPT文件
#prs.save('newtest.pptx') prs.save('test.pptx')
执行效果:
<>2.2 添加图形到PPT
import pptx from pptx.enum.shapes import MSO_SHAPE from pptx.dml.color import
RGBColorfrom pptx.util import Inches, Pt # 步骤一:得到演示文稿的对象 prs = pptx.Presentation
('test.pptx') # 以test.pptx为模板 # 步骤二:写入操作 # 设置幻灯片布局 slide = prs.slides.add_slide(
prs.slide_layouts[0]) # prs.slides.add_slide(prs.slide_layouts[1]) #
prs.slides.add_slide(prs.slide_layouts[2]) # 删除幻灯片 # print(len(prs.slides)) #
del prs.slides._sldIdLst[1] # 根据索引删除,删除第2张幻灯片 # print(len(prs.slides)) # 添加文本框
text1= slide.shapes.add_textbox(Inches(5), Inches(5), Inches(5), Inches(5))
text1.text = "这是文本框" # 添加段落 p1 = text1.text_frame.add_paragraph() p1.text =
"我是段落1" # 添加文本 p1.add_run().text = "end" title_shape = slide.shapes.title
title_shape.text = '标题1' slide.shapes.placeholders[1].text = '标题2' # 添加自选图形 #
写入矩形,设置位置及大小 #slide.shapes.add_shape(MSO_SHAPE.RECTANGLE, Inches(2), Inches(2),
Inches(5), Inches(3)) shape = slide.shapes.add_shape(MSO_SHAPE.HEXAGON, Inches(2
), Inches(2), Inches(5), Inches(3)) # 填充、边框 fill = shape.fill # 纯色填充 fill.solid(
) # 设置填充色 fill.fore_color.rgb = RGBColor(255, 0, 0) # 设置边线 line = shape.line
line.color.rgb = RGBColor(55, 3, 5) # 设置边线大小(宽度) line.width = Pt(2) #
步骤三:保存PPT文件 #prs.save('newtest.pptx') prs.save('test.pptx')
执行效果:
<>2.3 写入表格到PPT
import pptx from pptx.enum.shapes import MSO_SHAPE from pptx.dml.color import
RGBColorfrom pptx.util import Inches, Pt # 步骤一:得到演示文稿的对象 prs = pptx.Presentation
('test.pptx') # 以test.pptx为模板 # 步骤二:写入操作 # 设置幻灯片布局 slide = prs.slides.add_slide(
prs.slide_layouts[0]) # prs.slides.add_slide(prs.slide_layouts[1]) #
prs.slides.add_slide(prs.slide_layouts[2]) # 删除幻灯片 # print(len(prs.slides)) #
del prs.slides._sldIdLst[1] # 根据索引删除,删除第2张幻灯片 # print(len(prs.slides)) # 添加文本框
text1= slide.shapes.add_textbox(Inches(5), Inches(5), Inches(5), Inches(5))
text1.text = "这是文本框" # 添加段落 p1 = text1.text_frame.add_paragraph() p1.text =
"我是段落1" # 添加文本 p1.add_run().text = "end" title_shape = slide.shapes.title
title_shape.text = '标题1' slide.shapes.placeholders[1].text = '标题2' # 添加自选图形 #
写入矩形,设置位置及大小 #slide.shapes.add_shape(MSO_SHAPE.RECTANGLE, Inches(2), Inches(2),
Inches(5), Inches(3)) shape = slide.shapes.add_shape(MSO_SHAPE.HEXAGON, Inches(2
), Inches(2), Inches(5), Inches(3)) # 填充、边框 fill = shape.fill # 纯色填充 fill.solid(
) # 设置填充色 fill.fore_color.rgb = RGBColor(255, 0, 0) # 设置边线 line = shape.line
line.color.rgb = RGBColor(55, 3, 5) # 设置边线大小(宽度) line.width = Pt(2) # 添加表格 #
rows, cols, left, top, width, height table = slide.shapes.add_table(3, 3, Inches
(2), Inches(2), Inches(4), Inches(2)).table # 填充内容 table.cell(1, 0).text =
'name' table.cell(1, 1).text = 'age' table.cell(1, 2).text = 'hobby' table.cell(
2, 0).text = '张三' table.cell(2, 1).text = '18' table.cell(2, 2).text = 'music'
# 合并单元格 cell = table.cell(0, 0) cell1 = table.cell(0, 2) cell.merge(cell1) table
.cell(0, 0).text = '兴趣爱好信息' # 第一行 # 取消合并 #print(cell.is_merge_origin) # 单元格是否合并
#cell.split() # 步骤三:保存PPT文件 #prs.save('newtest.pptx') prs.save('test.pptx')
执行效果:
<>2.4 写入图表到PPT
import pptx from pptx.util import Inches from pptx.chart.data import
CategoryChartDatafrom pptx.enum.chart import XL_CHART_TYPE from pptx.enum.chart
import XL_LEGEND_POSITION # 步骤一:得到演示文稿的对象 prs = pptx.Presentation() # 步骤二:写入操作
# 设置幻灯片布局 slide = prs.slides.add_slide(prs.slide_layouts[0]) # 写入图表 chart_data =
CategoryChartData() chart_data.categories = ['一月份', '二月份', '三月份'] # X轴 # 具体数据
chart_data.add_series('Y2019', (250, 350, 500)) chart_data.add_series('Y2020', (
270, 380, 600)) chart_data.add_series('Y2021', (300, 450, 650)) '''
chart_type:图表类型, x, y, cx, cy, chart_data:图表数据 ''' chart = slide.shapes.
add_chart(XL_CHART_TYPE.COLUMN_CLUSTERED, Inches(2), Inches(2), Inches(6),
Inches(4), chart_data).chart # 设置图表标题 chart.has_title = True chart.chart_title.
text_frame.text = '第一季度销售额' # 设置图例 chart.has_legend = True # 设置图例位置 chart.legend
.position = XL_LEGEND_POSITION.RIGHT # 步骤三:保存PPT文件 prs.save('test2.pptx')
执行效果:
<>3. 综合实战:4S店汽车消费者洞察报告
import pptx from pptx.util import Inches, Pt from pptx.enum.shapes import
MSO_SHAPEfrom pptx.dml.color import RGBColor from pptx.chart.data import
CategoryChartDatafrom pptx.enum.chart import XL_CHART_TYPE from pptx.enum.chart
import XL_LEGEND_POSITION # 构建对象 prs = pptx.Presentation() # 第一页 slide1 = prs.
slides.add_slide(prs.slide_layouts[0]) # 标题 slide1.shapes.title.text =
'4S店汽车消费者洞察报告' # 占位符 slide1.shapes.placeholders[1].text = '2021年第一季度' # 第二页
slide2= prs.slides.add_slide(prs.slide_layouts[1]) # 布局 slide2.shapes.title.text
= '目录' # 通过占位符的方式获取 content = slide2.shapes.placeholders[1].text_frame # 添加段落
content.add_paragraph().text = '4S店第一季度汽车销售榜单' content.add_paragraph().text =
'汽车用户消费偏好趋势' content.add_paragraph().text = '汽车消费者用户画像' # 第三页 slide3 = prs.
slides.add_slide(prs.slide_layouts[1]) # 布局 slide3.shapes.title.text =
'4S店第一季度汽车销售榜单' ''' 行数:11, 列数:4, 距离左侧边缘距离:0, 距离顶部边缘距离:1.4, 宽度:10, 高度:6 ''' #
获取表格 table = slide3.shapes.add_table(11, 4, Inches(0), Inches(1.4), Inches(10),
Inches(6)).table # 写入内容 table.cell(0, 0).text = '排名' table.cell(0, 1).text =
'车型' table.cell(0, 2).text = '所属厂商' table.cell(0, 3).text = '一季度销售额' data = [ {
'type': '日产轩逸', 'base': '东风日产', 'total': 50000}, {'type': '大众宝来', 'base': '一汽大众'
, 'total': 46401}, {'type': '吉利帝豪', 'base': '吉利汽车', 'total': 43000}, {'type':
'奥迪A6', 'base': '一汽大众', 'total': 41000}, {'type': '大众速腾', 'base': '一汽大众',
'total': 40000}, {'type': '本田雅阁', 'base': '广汽本田', 'total': 39000}, {'type':
'奔驰C级', 'base': '北京奔驰', 'total': 35000}, {'type': '长安逸动', 'base': '长安汽车',
'total': 34000}, {'type': '宝马5系', 'base': '华晨宝马', 'total': 25000}, {'type':
'奥迪A4L', 'base': '一汽大众', 'total': 20000}, ] for i in range(11): if i>0: table.
cell(i, 0).text = str(i) # 排名 table.cell(i, 1).text = data[i-1]['type'] # 车型
table.cell(i, 2).text = data[i-1]['base'] # 所属厂家 table.cell(i, 3).text = str(
data[i-1]['total']) # 销量 # 第四页 slide4 = prs.slides.add_slide(prs.slide_layouts[1
]) # 布局 slide4.shapes.title.text = '汽车用户消费偏好趋势' shape1 = slide4.shapes.add_shape
(MSO_SHAPE.RECTANGLE, Inches(1), Inches(1.5), Inches(3), Inches(2.5)) fill =
shape1.fill # 纯色填充 fill.solid() # 设置填充色 fill.fore_color.rgb = RGBColor(51, 102,
255) shape1.text_frame.add_paragraph().text = '价位偏好:' p1 = shape1.text_frame.
add_paragraph() p1.text = '经济入门型' p1.font.size = Pt(35) shape2 = slide4.shapes.
add_shape(MSO_SHAPE.RECTANGLE, Inches(4), Inches(1.5), Inches(5), Inches(2.5))
shape2.text_frame.add_paragraph().text = '国别偏好:' p2 = shape2.text_frame.
add_paragraph() p2.text = '国产自主品牌' p2.font.size = Pt(35) shape3 = slide4.shapes.
add_shape(MSO_SHAPE.RECTANGLE, Inches(1), Inches(4), Inches(8), Inches(2.5))
fill= shape1.fill # 纯色填充 fill.solid() fill.fore_color.rgb = RGBColor(112, 219,
255) shape3.text_frame.add_paragraph().text = '车型偏好:' p3 = shape3.text_frame.
add_paragraph() p3.text = 'SUV车型仍为主力' p3.font.size = Pt(35) # 第五页 slide5 = prs.
slides.add_slide(prs.slide_layouts[1]) # 布局 slide5.shapes.title.text =
'汽车消费者用户画像' chart_data = CategoryChartData() chart_data.categories = ['70后',
'80后', '90后'] chart_data.add_series('各年龄段平均购车花费', (40, 45, 15)) # 柱状图 chart =
slide5.shapes.add_chart( XL_CHART_TYPE.COLUMN_CLUSTERED, Inches(1), Inches(2.5),
Inches(4), Inches(3), chart_data ).chart chart_data1 = CategoryChartData()
chart_data1.categories = ['男', '女'] chart_data1.add_series('性别分布', (65, 35)) #
饼图 chart1 = slide5.shapes.add_chart( XL_CHART_TYPE.PIE, Inches(6), Inches(2.5),
Inches(3), Inches(3), chart_data1 ).chart # 显示标题 chart.has_title = True # 显示标题
chart1.has_title = True # 显示图例 chart1.has_legend = True chart1.legend.position =
XL_LEGEND_POSITION.RIGHT # 第六页 slide6 = prs.slides.add_slide(prs.slide_layouts[
0]) slide6.shapes.title.text = '谢谢!' prs.save('report.pptx')
执行效果: