导读:日常工作中,我们经常要进行一些本地的数据统计,如期末考试每个班级的表现情况、每日运营指标完成情况统计等。并不是所有的这些统计需求都值得搭建一个前端页面进行展示,此时不妨在本地开发一个自动化统计报告生成的代码,帮助自己对工作有个整体性了解的同时,也便于汇报及展示。python作为数据分析人员常用的工具之一,其中的openpyxl模块可以便捷灵活的处理excel,当我们设计好报告模板,将对应数据进行统计插入,就可生成一份报告。
1设计报告模板
通过openpyxl是可以直接在代码中进行报告样式的生成,但当报告涉及的元素过多时,代码编辑报告样式需要反复确认修改的过程较为繁琐,而通过在excel中创建好样式模板、再导入python中的方法较为方便。
我们本次使用的样例数据为某电商平台各产品近一年的销售情况👇
现在希望可以按月生成一份记录销售情况的报告。根据需求,用excel设计一个报告模板👇
2python生成
根据模板可知,一共有三个部分需要动态填入数据,分别是:头部日期、本月总销售情况和近一年累计销售情况。针对三个部分分别封装三个函数,用以填入相应数据。
def header_tm(wb2,data,sheet,baserow=2):
sheet1 = wb2[sheet]
sheet1.cell(baserow, 8).value = str(datetime.now().date()).replace('-', '.')
return wb2
def part1(wb2,data,sheet,baserow=2):
sheet1 = wb2[sheet]
sheet1.cell(baserow, 2).value = data.iloc[:,-2].sum()
sheet1.cell(baserow, 4).value = (data.iloc[:,-2].sum()-data.iloc[:,-3].sum())/data.iloc[:,-3].sum()
sheet1.cell(baserow, 6).value = len(data[data.iloc[:,-2].notnull()])
sheet1.cell(baserow, 8).value = (len(data[data.iloc[:,-2].notnull()])-len(data[data.iloc[:,-3].notnull()]))/len(data[data.iloc[:,-3].notnull()])
return wb2
def part2(wb2,data,sheet,baserow=2):
sheet1 = wb2[sheet]
sheet1.cell(baserow, 3).value = data.iloc[:,-1].sum()
sheet1.cell(baserow, 5).value = data.iloc[:,-1].sum()/12
sheet1.cell(baserow, 7).value = len(data[data.iloc[:,-1].notnull()])
return wb2
各部分数据填入代码封装完毕,使用时通过主函数进行调用即可👇
if __name__ == '__main__':
record_tbl = pd.read_excel('data.xlsx')
wb2 = load_workbook('model.xlsx')
wb2 = header_tm(wb2,record_tbl,baserow=5,sheet = 'Sheet1')
wb2 = part1(wb2,record_tbl,baserow=15,sheet = 'Sheet1')
wb2 = part2(wb2,record_tbl,baserow=20,sheet = 'Sheet1')
name = '报告生成结果.xlsx'
wb2.save(name)
报告结果如下:
后台回复“报告”获取代码