美文网首页PythonPython
使用Python脚本自动处理Excel早贪黑榜统计

使用Python脚本自动处理Excel早贪黑榜统计

作者: NeWolf | 来源:发表于2021-07-02 19:10 被阅读0次

1、需求来源/项目背景

某天去找HR小姐姐有点事处理,过去后HR小姐姐说快忙死了,请稍等一会,聊天中知道HR小姐姐在统计一个月考勤记录,统计出起早贪黑榜,起早:就是早上打卡时间在9:30 之前的上班打开,算是早到;贪黑:就是在晚上20:30之后的下班打卡,另外这个榜单涉及到补助。而HR小姐姐在统计的考勤记录是某钉进行考勤后输出的 xxx.xlsx的表格文档。

2、需求分析

打开表格后,出现的数据如下图:


发现:

  • 标题显示了 姓名日期
  • 每个人的打开数据按照一行进行排列
  • 打卡时间为0到多次,有多人多记录里出现一天超过2次的记录
  • 打开时间格式为 xx:xx , 例如:09:30

实现分析

1.要将原始表格内容读取到 程序中,选择Python脚本
2.通过一定的计算、统计
3.将结果按照一定的格式,输出到Excel中,方便阅读

3、需求实现

1.要将原始表格内容读取到 程序中,选择Python脚本

data = xlrd.open_workbook(file_name)  # 读取数据

2.通过一定的计算、统计

page = len(data.sheets())  # 获取sheet的数量
    for i in range(page):
        table = data.sheets()[i]
        # print(table.name, i)
        result_sheet = result.add_sheet(table.name)  # 写sheet name
        result_cols = 0
        for row_result in range(len(result_title)):
            result_sheet.write(result_cols, row_result, result_title[row_result])  # 写标题

        n_rows = table.nrows  # 获取总行数
        n_cols = table.ncols  # 获取总列数
        for row in range(n_rows):
            advance = 0
            go_late = 0
            name = table.cell_value(row, 0)
            # print('name = %s , is name = %s' % (name, (name == IGNORE_NAME)))
            if name == IGNORE_NAME:
                continue
            for col in range(n_cols):
                cell_data = table.cell_value(row, col)
                string_date = str.strip(cell_data)
                string_date = string_date.replace(' ', '')
                string_date = string_date.replace('\'', '')
                split_date = string_date.split('\n')
                advance_flag = 0
                go_late_flag = 0
                for index in range(len(split_date)):
                    time = split_date[index]
                    # if 'NeWolf' == name and len(time) > 2:
                    #     print('time = %s' % time)

                    if len(time) > 6:
                        # print('len(time) > 6 time = %s' % time)
                        continue

                    if not time.__contains__(":"):
                        # if not '' == time:
                        # print('not time = %s' % time)
                        continue

                    # print('normal time = %s' % time)

                    is_advance = ADVANCE_START <= time <= ADVANCE_END
                    if is_advance:
                        advance_flag = 1
                        # print('is_advance = %s time = %s' % (is_advance, time))

                    is_late = GO_LATE_START <= time <= GO_LATE_END or \
                              GO_LATE_TOMORROW_START <= time <= GO_LATE_TOMORROW_END
                    if is_late:
                        go_late_flag = 1
                        # print('is_late = %s time = %s' % (is_late, time))

                advance += advance_flag
                go_late += go_late_flag

                # print(split_date)

            if advance != 0 or go_late != 0:
                total_advance_money = advance * ADVANCE_MONEY
                total_go_late_money = go_late * GO_LATE_MONEY
                total_money = total_advance_money + total_go_late_money

                # print(
                #     'name %s , advance = %s, total_advance_money = %s ,go_late = %s , total_go_late_money = %s , '
                #     'total_money = %s' % (
                #         name, advance, total_advance_money, go_late, total_go_late_money, total_money))
                person_stats = [name, advance, total_advance_money, go_late, total_go_late_money, total_money]
                result_cols += 1
                for row_result in range(len(person_stats)):
                    result_sheet.write(result_cols, row_result, person_stats[row_result])

    result_cols += 3
    import time
    use_time = time.time() - start_time

3.将结果按照一定的格式,输出到Excel中,方便阅读

result = xlwt.Workbook()
    result_title = ['姓名', '起早', '金额(15元/天)', '贪黑', '金额(25元/天)', '起早贪黑合计补助(元)']
...
result_sheet = result.add_sheet(table.name)  # 写sheet name
        result_cols = 0
        for row_result in range(len(result_title)):
            result_sheet.write(result_cols, row_result, result_title[row_result])  # 写标题
...
person_stats = [name, advance, total_advance_money, go_late, total_go_late_money, total_money]
                result_cols += 1
                for row_result in range(len(person_stats)):
                    result_sheet.write(result_cols, row_result, person_stats[row_result])

4、实现结果

发现格式有点不美观,优化一下下


OK,搞定。


5、遗留问题

  • 输出的Excel格式需要人工美化,是否可以通过代码进行呢?
  • 想做一个写入加密,但是还没搞定

6、思考

忘了是谁说的了

  • 用科技让复杂的世界更简单
  • 让世界沟通更简单

人工处理这种重复性内容,眼睛好累还容易出错,时间还长,人工处理大概需要1天,而程序只需要不到 1s 。

7、参考内容

自动化办公:python操作Excel

8、END

感谢您的阅读,源码请参考https://github.com/newsolf/AutoTimeSheet

相关文章

网友评论

    本文标题:使用Python脚本自动处理Excel早贪黑榜统计

    本文链接:https://www.haomeiwen.com/subject/rekyultx.html