|
20鱼币
如题,请大佬使用python帮忙完善代码,已知如下:
表格是一个打卡记录,sheet中3列,每列包含姓名、日期、打卡时间(一天中有4-6次)
sheet1每列包含姓名、日期、上午打卡次数(8-12点),下午打卡次数(14-18点)
希望在sheet中判断打卡时间是上午还是下午,有一次打卡就再sheet1中将姓名、日期相匹配的上午打卡或下午打卡的格子中数字+1
我的原代码写到一半,在判断的时候就不会写了,姑且附上做个参考,如果能帮忙继续写下去并做点注释就最好了!!
>>> import xlrd
>>> import xlwt
>>> from xlutils.copy import copy
>>> kq = xlrd.open_workbook('D:\Program Files\zz\测试1.xlsx')
>>> table = kq.sheet_by_index(0)
>>> all_data = []
>>> for n in range(1,table.nrows):
本帖最后由 XiaoPaiShen 于 2019-10-28 07:13 编辑
该程序在excel文件中新建一个名字为 ‘kaoqin’ 的表单(sheet)
你给的文件要先把后缀改为xls, 用Excel打开,再另存为xlsx文件。
可能是读写时有损坏,如果文件能用Excel打开,没必要改后缀。
- import openpyxl
- def judge_time(target):
- # 判断字符串是上午,还是下午
- # 12:00 是下午
- hour, minute = target.split(':', 1)
- if int(hour) < 12:
- return 'am'
- else:
- return 'pm'
- def create_tongji(sheet_name, workbook):
- # 创建表单‘kaoqin’
- if sheet_name in workbook.sheetnames:
- del workbook[sheet_name]
- ws_tongji = workbook.create_sheet(title = sheet_name)
- ws_tongji.column_dimensions['A'].width = 20
- ws_tongji.column_dimensions['B'].width = 20
- ws_tongji.column_dimensions['C'].width = 20
- ws_tongji.column_dimensions['D'].width = 20
- ws_tongji['A1'] = '姓名'
- ws_tongji['B1'] = '日期'
- ws_tongji['C1'] = '上午打卡次数'
- ws_tongji['D1'] = '下午打卡次数'
- return ws_tongji
- def generate_data(source_name, workbook):
- # 创建字典:
- # key = 姓名|考勤日期
- # value = {'am': 打卡次数, 'pm': 打卡次数}
- ws_source = workbook[source_name]
- kaoqin_dict = dict()
-
- for row in ws_source.iter_rows(min_row=2):
- name_date = row[2].value.strip() + '|' + row[3].value.strip()
- am_pm = judge_time(row[4].value)
-
- if name_date in kaoqin_dict.keys():
- res = kaoqin_dict[name_date]
- if am_pm == 'am':
- res['am'] += 1
- else:
- res['pm'] += 1
- else:
- res = {'am':0, 'pm':0}
- if am_pm == 'am':
- res['am'] += 1
- else:
- res['pm'] += 1
- kaoqin_dict[name_date] = res
- return kaoqin_dict
- def convert_data(data_dict):
- # 将字典转换成列表:
- # [姓名,考勤日期,上午打卡,下午打卡]
- result = []
- for key, value in data_dict.items():
- name, date = key.split('|', 1)
-
- am = '' if value['am'] == 0 else value['am']
- pm = '' if value['pm'] == 0 else value['pm']
- result.append([name, date, am, pm])
- return result
-
- def fill_tongji(worksheet, data_list):
- for row in data_list:
- worksheet.append(row)
-
- def main():
- file_name = 'test01.xlsx'
- wb = openpyxl.load_workbook(file_name)
-
- ws_tongji = create_tongji('kaoqin', wb)
- kq_dict = generate_data('Sheet', wb)
- kq_list = convert_data(kq_dict)
- fill_tongji(ws_tongji, kq_list)
- wb.save(file_name)
-
- if __name__ == '__main__' :
- main()
复制代码
|
最佳答案
查看完整内容
该程序在excel文件中新建一个名字为 ‘kaoqin’ 的表单(sheet)
你给的文件要先把后缀改为xls, 用Excel打开,再另存为xlsx文件。
可能是读写时有损坏,如果文件能用Excel打开,没必要改后缀。
|