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行使用了格式化字符串的相关知识,将匹配结果输出在了终端上。

 

posted @ 2020-11-28 18:51  Malakh  阅读(215)  评论(1编辑  收藏  举报