最近,和认识的一位小姐姐吃饭聊天,期间谈到了她的烦恼。本来属于吃货的她,瞬间就没有吃饭的活力,满脸愁容,看了让人心疼。
原来,她刚刚接到领导安排的新任务,要求她对全年的产品销售额进行汇总和绘图。本来她觉得这没什么,自信对EXCEL熟练操作的她爽快地答应了。可是,当她今天从同事那里拿到数据,便吓了个花容失色。
用她自己的话说:“那满屏幕的EXCEL啊,看着都头大”。
我半试探地说:“应该也不多吧?”
她说:“同事是好同事,每天的数据都认真存一个EXCEL,还编号的好仔细,从1到365,一天不差。”这样说着,还不忘记塞一块肉到嘴里,只是咀嚼的速度明显慢了许多。
她接着说:“你知道吗?我要一个一个EXCEL的打开,对每列求和,还要画个直方图出来。你想想啊,365个,光打开关闭,我不得累死!”
我说:“你别急,我有办法,明天告诉你哈。现在要好好吃饭。”
小姐姐一听半开心半质疑地问:“真的?!”
我说:“真的。”
小姐姐立马开心了起来,愉快地吃起饭来。
回到家,我便发挥了我的强项,写了个Python脚本,使用Python的openpyxl包先产生了10个EXCEL作为模拟的数据,代码如下(怕小姐姐看着代码烦,还贴心的有些地方使用了汉语编程):
from openpyxl import Workbook
import numpy as np
np.random.seed(1)
for i in range(0, 10, 1):
工作薄 = Workbook()
表单 = 工作薄.active # sheet
随机数1 = np.random.randint(low=20, high=30, size=7)
随机数2 = np.random.randint(low=30, high=50, size=7)
# Let's create some sample sales data
rows = [
["产品", "线上", "店铺"],
[1, 随机数1[0], 随机数2[0]],
[2, 随机数1[1], 随机数2[1]],
[3, 随机数1[2], 随机数2[2]],
[4, 随机数1[3], 随机数2[3]],
[5, 随机数1[4], 随机数2[4]],
[6, 随机数1[5], 随机数2[5]],
[7, 随机数1[6], 随机数2[6]],]
for row in rows:
表单.append(row)
工作薄.save("exam"+str(i+1)+".xlsx")
随便打开一个产生的EXCEL,截图如下:
另一个Python的脚本就是实现对产生的10个EXCEL操作,对第二、三列分别求和,并把“和”写在后边,并把用到的数据标成红色,同时在边上画出直方图,代码如下:
from openpyxl import load_workbook
from openpyxl.chart import BarChart, Reference
from openpyxl.styles import Font, Color, Alignment, Border, Side
from openpyxl.styles import PatternFill
double_border_side = Side(border_style="double")
def add_a_sum(sheet, at='B9', column=2, min_col=2, max_col=8):
### 求和(被求和项标记为红色):
sumv=0.0
for m in range(min_col, max_col+1, 1):
sumv += sheet.cell(row=m, column=column).value
sheet[at[0:1]+str(m)].font = Font(color="00FF0000")
sheet[at]= sumv
### 设置“和”的单元格类型:
sheet[at].font = Font(size=15)
sheet[at].alignment = Alignment(horizontal="center")
sheet[at].border = Border(top=double_border_side,
right=double_border_side,
bottom=double_border_side,
left=double_border_side)
sheet[at].fill = PatternFill(start_color='f8c471',
end_color='f8c471',
fill_type = "solid")
### 循环处理文件:
for i in range(0, 10, 1):
workbook = load_workbook(filename="exam"+str(i+1)+".xlsx")
sheet = workbook.active
### 添加求和:
sheet['A9']='总量:'
add_a_sum(sheet, at='B9', column=2, min_col=2, max_col=8)
add_a_sum(sheet, at='C9', column=3, min_col=2, max_col=8)
### 绘制图:
chart = BarChart()
data = Reference(worksheet=sheet, min_row=1, max_row=8,
min_col=2, max_col=3)
chart.add_data(data, titles_from_data=True)
chart.x_axis.title = "产品"
chart.y_axis.title = ""
### 可选类型 1 到 48
chart.style = 2
sheet.add_chart(chart, "E2")
### 保存:
workbook.save("chart/exam"+str(i+1)+"_chart.xlsx")
修改后产生的EXCEL我存在了chart文件夹下,随便打开一个EXCEL,截图如下:
最后,为了让小姐姐明白操作过程,我还录了屏,如下:
操作过程
大功告成!想想明天把程序发给小姐姐,只要稍微修改,她的365个EXCEL文档就轻松搞定了,我就很开心。希望小姐姐明天也开心。待续。。。