学好办公自动化,走遍天下都不怕!!
办公三件套Excel、Word 和PPT。前面已经学习过如何处理excel数据以及批量自动生成word文档。
今天主要是利用前面学习的python-pptx模块并且根据房屋销售信息生成分析报告。报告总共6页内容,包括:文本,自选图形,table表格,柱状图和饼状图。
1.导入模块和包
python-pptx没有安装的需要先安装:pip install python-pptx
import pptx
# 设置距离宽度
from pptx.util import Inches,Pt
# 添加图形
from pptx.enum.shapes import MSO_SHAPE
# 填充颜色
from pptx.dml.color import RGBColor
#导入写入图表用的包
from pptx.chart.data import CategoryChartData
from pptx.enum.chart import XL_CHART_TYPE
# 设置图例会用到
from pptx.enum.chart import XL_LEGEND_POSITION
2.创建ppt幻灯片
# python根据消费者信息生成分析报告
ppts = pptx.Presentation()
幻灯片总共分为6张,首页、主要目录、消费榜单、消费偏好趋势、消费者用户画像饼状图以及尾页。
2.1 第一页
第一页主要是幻灯片的标题,内容比较少,标题以及副标题。
#第一页
slide1 = ppts.slides.add_slide(ppts.slide_layouts[0])
slide1.shapes.title.text = '房产销售消费者洞察报告'
slide1.shapes.placeholders[1].text='2024年第一季度'
2.2 第二页
第二页是分析报告的目录。标题目录下新增文本框,每个目录新增一个段落,最终形成第二页内容。
# 第二页
slide2 = ppts.slides.add_slide(ppts.slide_layouts[1])
slide2.shapes.title.text='目录'
content = slide2.shapes.placeholders[1].text_frame
content.add_paragraph().text='房产销售第一度房屋消费榜单'
content.add_paragraph().text='业主消费偏好趋势'
content.add_paragraph().text='房屋消费者用户画像'
2.3 第三页
第三页是一个table列表,是第一季度消费榜单。共四列11行数据。
# 第三页
slide3 = ppts.slides.add_slide(ppts.slide_layouts[1])
slide3.shapes.title.text = '房产销售第一度房屋消费榜单'
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':5000},
{'type':'一房两厅','base':'万科房产','total':5000},
{'type':'两房一厅','base':'恒大房产','total':5000},
{'type':'两房两厅','base':'万科房产','total':5000},
{'type':'两房三厅','base':'恒大房产','total':5000},
{'type':'三房一厅','base':'万科房产','total':5000},
{'type':'三房两厅','base':'恒大房产','total':5000},
{'type':'四房两厅','base':'万科房产','total':5000},
{'type':'联排别墅','base':'恒大房产','total':5000},
{'type':'独栋别墅','base':'万科房产','total':5000}
]
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'])
幻灯片添加table,并给table的单元格赋值,第一行表头依次赋值 排名、户型、所属开发商、销售额四列。大部分数据来自于data对象数组遍历后赋值给每个单元格。
2.4 第四页
第四页是消费者偏好趋势,主要是幻灯片中添加自选图形,设置显示位置以及填充颜色和段落文本以及文本字体的大小调整。
# 第四页
slide4 = ppts.slides.add_slide(ppts.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))
fill = shape2.fill
fill.solid()
fill.fore_color.rgb = RGBColor(0,184,245)
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 = shape3.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 = "中等户型仍为主力"
p3.font.size = Pt(35)
2.5 第五页
第五页是各年龄段的平均购房花费和性别分布,分别用柱状图和饼图展示,并且给饼图设置了图例以及图例显示位置。
#第五页
slide5 = ppts.slides.add_slide(ppts.slide_layouts[1])
slide5.shapes.title.text = '房屋消费者用户画像'
chart_data = CategoryChartData()
chart_data.categories = ['70后','80后','90后'] # x轴的数据
chart_data.add_series('各年龄段平均购房花费',(40,45,25))
chart0 = slide5.shapes.add_chart(XL_CHART_TYPE.COLUMN_CLUSTERED,Inches(1),Inches(2.5),Inches(4),Inches(3),chart_data).chart
chart0.has_legend = True
chart0.legend.position = XL_LEGEND_POSITION.RIGHT
chart_data1 = CategoryChartData()
chart_data1.categories = ['男','女'] # x轴的数据
chart_data1.add_series('性别分布',(65,35))
chart = slide5.shapes.add_chart(XL_CHART_TYPE.PIE,Inches(6),Inches(2.5),Inches(3),Inches(3),chart_data1).chart
chart.has_title = True
chart.chart_title.text_frame.text='性别分布图表'
chart.has_legend = True
chart.legend.position = XL_LEGEND_POSITION.RIGHT
2.6 第六页
第六页比较简单,是一张致谢结尾的幻灯片。最后保存文件对象。
# 第六页
slide6 = ppts.slides.add_slide(ppts.slide_layouts[0])
slide6.shapes.title.text = '谢谢'
# 保存
ppts.save('car_case.pptx')
3.运行文件生成分析报告
编辑好所有的幻灯片文件,并且保存文件,我们来控制台执行文件执行: python pptcase.py
可以看到项目文件夹中新增了一个car_case.pptx文件。就是我们刚刚保存的文件。
打开之后可以看到我们用python-pptx模块并且根据我们的需求成功生成了分析报告。
Python办公自动化 python-pptx模块的安装与使用【1】-CSDN博客
更多的python知识请参考:
python运行环境的搭建 | python爬虫获取数据 | python自动化之word篇 | python处理excel数据