最近,和认识的一位小姐姐吃饭聊天,期间谈到了她的烦恼。本来属于吃货的她,瞬间就没有吃饭的活力,满脸愁容,看了让人心疼。
原来,她刚刚接到领导安排的新任务,要求她对全年的产品销售额进行汇总和绘图。本来她觉得这没什么,自信对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 o import BarChart, Reference from o import Font, Color, Alignment, Border, Side from o 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 += (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) c(data, titles_from_data=True) c = "产品" c = "" ### 可选类型 1 到 48 c = 2 (chart, "E2") ### 保存: workbook.save("chart/exam"+str(i+1)+"_c;)
修改后产生的EXCEL我存在了chart文件夹下,随便打开一个EXCEL,截图如下:
最后,为了让小姐姐明白操作过程,我还录了屏,如下:
操作过程
大功告成!想想明天把程序发给小姐姐,只要稍微修改,她的365个EXCEL文档就轻松搞定了,我就很开心。希望小姐姐明天也开心。待续。。。