最近几天,老板要求给他弄ppt图表。
本来,我excel可以批量操作给他,但他让我搞ppt。
但是呢,我不懂ppt,而且,这个ppt我找了半天,没找到批量生成图表之法。
一次要画300个图呢!!!手动画得一整天,而且重复操作,没几分钟就头晕眼花了。
而且老板还要求每个月画一次。。。
于是,我想找个js的框架来弄,但没找着。于是找python,我对python也是0基础,同事用C`ha^tGP?T生成了需求代码让我试,搞了很多次才能成功运行。运行后得到很VV琐的、错乱的图片,我又现学现卖改了几个小时,完美了!
![](https://img.haomeiwen.com/i3532468/2a17d721346a8fc5.png)
![](https://img.haomeiwen.com/i3532468/c5aec9fb9dc08ac2.png)
# 创建Presentation对象
presentation = Presentation()
plt.figure(figsize=(8.5,6)) # 设置生成的图片尺寸大小,单位 inch
# 遍历每行数据,每行代表一个站点
for index, row in excel_data.iterrows():
# 提取站点ID和站点名
goods_id = row['ID']
goods_name = row['名称']
# 创建幻灯片
slide_layout = presentation.slide_layouts[5] # 使用标题和内容布局
slide = presentation.slides.add_slide(slide_layout)
# 添加标题
title = slide.shapes.title
title.text = f"{goods_name} - {goods_id}"
# 提取收入和支出数据
ride_out_data = row.iloc[3:27].tolist() # 假设数据从第4列到26列
ride_in_data = row.iloc[28:].tolist()
# 绘制柱状图。注意,hours是数组!!!,excel有100行就有100个柱状图,每个柱状图有 一个 hours 数组
hours = range(len(ride_in_data))
# plt.bar(x, y, width,color, edgecolor, bottom, linewidth, align, tick_label, align)
# 为了让2个柱子不重叠,前面的柱子设置宽度为负数。
plt.bar(hours, ride_out_data, width=-0.4, align='edge', label='支出', color='green')
plt.bar(hours, ride_in_data, width=0.4, align='edge', label='收入', color='orange')
# plt.xticks(rotation=45, ha='right')
plt.xticks(hours) # 显示所有坐标。没有这句,就只显示 0,5,10,15,20...
plt.xlabel('时段')
plt.ylabel('假装是马内')
# plt.title(f"{goods_name} (ID: {goods_id}) 每小时收入和支出订单")
plt.legend()
# 将图形保存为临时文件
temp_file = f'temp_{index}.png'
plt.savefig(temp_file)
plt.close()
# 添加图像到幻灯片
left = Inches(1) # Inches()是转换成英寸,1表示一英寸 = 2.54cm
top = Inches(1.3)
slide.shapes.add_picture(temp_file, left, top)
# 删除临时文件
os.remove(temp_file)
# 保存PPT文件
presentation.save("goods_data.pptx")
首先,你得安装了python环境。
其次,再把那些插件装上,
power shell安装
使用国内镜像会快些
pip config set global.index-url https://mirrors.aliyun.com/pypi/simple/
逐一安装一下插件
pip install pandas
pip install python-pptx
pip install matplotlib
pip install openpyxl
网友评论