实例16—工作表、顺序、人数都不同,快速计算工资总和
场景模拟:(本节视频)
结合day15,我们知道,在每个月份的工作表中,由于人员离职或者入职,职工人员是在变化着的,并且每个工作表中的顺序又不相同,还有,不是所有人都干满12个月,怎么快速计算本年度员工工资呢,真的很头疼,交给python很轻松解决。
1、用到的知识点:
Python的基本数据结构,包括集合和字典及字典生成式、python处理excel的openpyxl模块:wb对象遍历,ws对象遍历及工作表新增和写入,单元格cell遍历读取等。
2、操作步骤思维导图:
3、用到的文件及对应视频:
文件见day15分享,本节操作和上一节紧密结合,请完成转换后才能利用。
核心思想:建立员工数据结构,遍历每个月,每一行,把对应姓名的人员工资添加到字典中的value值列表中。 {'山河':[1,2,3,4], '岳不':[333,333,444,],……}
对应视频 <day16配套视频>
4、代码操作编写截图:
give your the code:
from openpyxl import load_workbook
wb = load_workbook('2021年度工资.xlsx')
employee = set()
# 获取所有员工信息
for ws in wb.worksheets:
for row in ws.iter_rows(min_row=2,max_col=1):
for cell in row:
employee.add(cell.value)
# 初始化员工数据结构
# emp_data = dict.fromkeys(employee,[]) 巨大的坑
emp_data = {key:[] for key in employee}
# 循环遍历添加对应员工各月工资信息
for ws in wb.worksheets:
for i in range(2,ws.max_row+1):
name = ws['A'+str(i)].value
salary = ws['C'+str(i)].value
emp_data[name].append(salary)
# 创建汇总表
all = wb.create_sheet('total')
all.append(('姓名','总工资')) # 添加表头
for k,v in emp_data.items():
all.append((k,sum(v))) # 添加姓名和总工资
wb.save('result.xlsx')
汇总结果
特别提醒:初始化员工工资是数据结构时候,有一个巨大的坑,我已犯错,请你避过