20201128-4 筛选匹配
E-1 from openpyxl import load_workbook, Workbook # 打开【10月考勤统计.xlsx】工作簿 wb = load_workbook('./material/10月考勤统计.xlsx') # 获取活动工作表 ws = wb.active # 获取表头 late_header = [] for cell in ws[1]: late_header.append(cell.value) # 新建工作簿 new_wb = Workbook() # 获取新工作簿中的工作表 new_ws = new_wb.active # 将表头写入新工作簿的工作表中 new_ws.append(late_header) # 从第二行开始遍历表格 for row in ws.iter_rows(min_row=2, values_only=True): # 取出姓名,迟到时间和迟到次数 name = row[1] time = row[3] number = row[-1] # 判断是否迟到 if time > 45 and number > 3: print('{}迟到了{}分钟,迟到了{}次'.format(name, time, number)) # 将迟到人员信息写入新工作簿的工作表中 new_ws.append(row) # 将新工作簿保存为【10月迟到人员信息.xlsx】 new_wb.save('./material/10月迟到人员信息.xlsx')
E-2 from openpyxl import load_workbook, Workbook # 打开【10月考勤统计.xlsx】工作簿 wb = load_workbook('./material/10月考勤统计.xlsx') # 获取活动工作表 ws = wb.active # 获取表头 late_header = [] for cell in ws[1]: late_header.append(cell.value) # 新建工作簿 new_wb = Workbook() # 获取新工作簿中的工作表 new_ws = new_wb.active # 将表头写入新工作簿的工作表中 new_ws.append(late_header) # 从第二行开始遍历表格 for row in ws.iter_rows(min_row=2, values_only=True): # 取出姓名,迟到时间和迟到次数 name = row[1] time = row[3] number = row[-1] # 判断是否迟到 if time > 45 and number > 3: print('{}迟到了{}分钟,迟到了{}次'.format(name, time, number)) # 将迟到人员信息写入新工作簿的工作表中 new_ws.append(row) # 将新工作簿保存为【10月迟到人员信息.xlsx】 new_wb.save('./material/10月迟到人员信息.xlsx') 第8行创建了一个空的列表late_header用来保存表头数据。 第10和11行使用for循环遍历出了工作表的第一行(表头),然后将获取到的单元格对象的值(表头的值)存入列表中。 在之后的任务中,如果你需要获取表头的数据,建议你继续使用这种写法。 使用工作表对象的方法获取从第二行开始的数据,语法是: iter_rows(min_row=2, values_only=True)。 第24至26行获取了表格中每一行的姓名,迟到时间和迟到次数三个数据,方便后面使用。 第29行,使用了字符串格式化输出的知识点,将迟到人员姓名,迟到时间和迟到次数打印在了终端上。
E-3 使用相同的数据,即【10月考勤统计.xlsx】,筛选出人力资源部的迟到人员信息,
将筛选结果打印在终端上然后将迟到人员的信息存储为【人力资源部10月迟到人员信息.xlsx】。 from openpyxl import load_workbook, Workbook # 打开【10月考勤统计.xlsx】工作簿 wb = load_workbook('./material/10月考勤统计.xlsx') # 获取活动工作表 ws = wb.active # 获取表头 late_header = [] for cell in ws[1]: late_header.append(cell.value) # 新建工作簿 new_wb = Workbook() # 获取新工作簿中的工作表 new_ws = new_wb.active # 将表头写入新工作簿的工作表中 new_ws.append(late_header) # 从第二行开始遍历表格 for row in ws.iter_rows(min_row=2, values_only=True): # 取出姓名,部门,迟到时间和迟到次数 name = row[1] department = row[2] time = row[3] number = row[-1] # 判断是否迟到 if department == '人力资源部' and time > 45 and number > 3: print('人力资源部的{}迟到了{}分钟,迟到了{}次'.format(name, time, number)) # 将迟到人员信息写入新工作簿的工作表中 new_ws.append(row) # 将新工作簿保存为【10月迟到人员信息.xlsx】 new_wb.save('./material/人力资源部10月迟到人员信息.xlsx')
E-4 from openpyxl import load_workbook # 打开工作簿【10月考勤统计.xlsx】,获取活动工作表 wb = load_workbook('./material/10月考勤统计.xlsx') ws = wb.active # 创建迟到人员字典 info_dict = {} # 循环读取除表头外的表格数据 for row in ws.iter_rows(min_row=2, values_only=True): # 取出员工工号 staff_id = row[0] # 取出迟到次数 staff_late = row[-1] # 将信息添加入字典,字典格式为{'员工工号': '迟到次数'} info_dict[staff_id] = staff_late # 打开工作簿【迟到次数月度统计(10月更新).xlsx】,获取活动工作表 monthly_wb = load_workbook('./material/迟到次数月度统计(10月更新).xlsx') monthly_ws = monthly_wb.active # 循环读取出表头外的表格数据 for monthly_row in monthly_ws.iter_rows(min_row=3, max_col=13, values_only=True): # 取出员工工号 member_id = monthly_row[0] # 取出十月份的迟到次数 member_late = monthly_row[-1] # 匹配迟到次数是否相等 if member_late != info_dict[member_id]: print('工号{}迟到情况不匹配,请核查后更新'.format(member_id))
第3-5行,第19-21行,使用load_workbook()
分别打开了【10月考勤统计.xlsx】和【迟到次数月度统计(10月更新).xlsx】。
且通过工作簿对象的属性active
获取到了活动工作表
第31行使用了格式化字符串
的相关知识,将匹配结果输出在了终端上。