需求
将微信接龙打卡更新到考勤表中,已到的人✔,未到的人❌
思路拆分
对比两列,一列是人员姓名(固定列),一列是此人当日打卡情况。每次微信打卡后,复制接龙到表格的对比列中,如果固定列的名字有出现在对比列中,则更新当日打卡记录。
1cells = sheet['A3:A11'] #固定列
2cells2 = sheet['N3:N12'] #对比列
3cells3 = sheet['C3:C11'] #保存到新列,每日更新
姓名\日期 | 10月5日 | 10月6日 |
---|---|---|
张三 | ✔ | ✔ |
李四 | ❌ | ✔ |
王五 | ✔ | ✔ |
使用的python包:openpyxsl模块 参考教程:https://blog.csdn.net/weixin_44288604/article/details/120731317
1import os
2import openpyxl
3import chardet
4import codecs
5
6
7path = r"C:\\Users\\DELL\\Desktop\\work"
8os.chdir(path) # 修改工作路径
9
10workbook = openpyxl.load_workbook('志愿者考勤表.xlsx') # 返回一个workbook数据类型的值
11# print(workbook.sheetnames) # 打印Excel表中的所有表
12
13# 选择工作表
14sheet = workbook['Sheet1'] # 获取指定sheet表
15
16cells = sheet['A3:A11'] #固定列
17cells2 = sheet['N3:N12'] #对比列
18cells3 = sheet['C3:C11'] #保存到新列,每日更新
19
20for i in cells:
21 for j in i:
22 # 打印A3到A11的数据
23 # print(j.value)
24 for k in cells2:
25 for l in k:
26 # 打印N3到N12的数据
27 # print(l.value)
28 if(l.value != None):
29 if(j.value.find(l.value) == -1):
30 print(l.row)
31 else:
32 sheet["C{}".format(j.row)].value = '✔'
33for k in cells3:
34 for l in k:
35 if( sheet["C{}".format(l.row)].value != '✔'):
36 print(l.row)
37 sheet["C{}".format(l.row)].value = '×'
38
39
40workbook.save('志愿者考勤表.xlsx') #记得保存,否则更改不生效
需求变更
- 要求整张表的行列对调
日期\姓名 | 张三 | 李四 | 王五 |
---|---|---|---|
10月5日 | ✔ | ❌ | ✔ |
10月6日 | ✔ | ✔ | ✔ |
1import os
2import openpyxl
3import chardet
4import codecs
5
6
7path = r"C:\\Users\\DELL\\Desktop\\work\\考勤表"
8os.chdir(path) # 修改工作路径
9
10workbook = openpyxl.load_workbook('志愿者考勤表.xlsx') # 返回一个workbook数据类型的值
11# print(workbook.sheetnames) # 打印Excel表中的所有表
12
13# 选择工作表
14sheet = workbook['Sheet1'] # 获取指定sheet表
15alignment = openpyxl.styles.Alignment(horizontal="center", vertical="center", text_rotation=0, wrap_text=True) # 设置对齐格式
16def columnletter(col):
17 letter = [0, 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N']
18 return letter[col]
19
20for i in sheet.iter_rows(min_row=2, max_row=2, min_col=2, max_col=10):
21 for j in i:
22 # 打印固定行(姓名行)
23 # print(j.value)
24 for k in sheet.iter_rows(min_row=16, max_row=16, min_col=1, max_col=10):
25 for l in k:
26 # 打印对比行(excel手动转置)
27 # print(l.value)
28 if(l.value != None):
29 if(j.value.find(l.value) == -1):
30 #print(l.column) #注意打印出来的是数字,而不是字母
31 else:
32 # -----------------------
33 #新信息注入新行,打勾
34 # -----------------------------
35 sheet["{}5".format(columnletter(j.column))].value = '✔'
36 sheet["{}5".format(columnletter(j.column))].alignment = alignment
37# -----------------------------
38#新信息注入新行,打叉
39# -----------------------------
40for k in sheet.iter_rows(min_row=5, max_row=5, min_col=2, max_col=10):
41 for l in k:
42 if( sheet["{}5".format(columnletter(l.column))].value != '✔'):
43 print(l.column)
44 sheet["{}5".format(columnletter(l.column))].value = '×'
45 sheet["{}5".format(columnletter(l.column))].alignment = alignment
46
47workbook.save('志愿者考勤表.xlsx')