excel整理日报

匿名 (未验证) 提交于 2019-12-02 23:39:01
#!/usr/bin/env python3# -*- coding:utf-8 -*-# __author__ = 'eason'import xlrdimport xlwtimport osdef summary():    '''    将多人的日报整理到同一个excel文件中report_summary.xls    :return:    '''    cur_path = os.getcwd()    report_list = []    for file in os.listdir(cur_path):        if file.split('.')[1].__contains__('xls'):  #回头要添加一个保护。否则当出现没有.的文件或文件夹时会报错。            file_path = cur_path + '\\' + file            data = xlrd.open_workbook(file_path)            table_report = data.sheets()[0]            row_num = table_report.nrows            for r in range(1,row_num):                report_row = table_report.row_values(r)                if report_row[0] in ['', '        '] or report_row[1] in ['', '        ']:  #当某行没有填写姓名或日期。跳过。                    continue                report_list.append(report_row)    report_list = sorted(report_list, key=lambda x: x[3]) #目前是通过所在项目排序。后续改成先后通过日期,项目,名字排序    xls = xlwt.Workbook()    sht1 = xls.add_sheet(r'日报汇总')    for r, report in enumerate(report_list):        for c, value in enumerate(report):            sht1.write(r, c, value)    xls.save('./report_summary.xls')def get_stat_result(report_list, person, date='按周统计'):    '''    统计分析核心代码。通过参数个数支持按天和按周统计。    :param report_list:    :param person:    :param date:    :return:    '''    #定义过程变量和结果变量    work_time_1date = 0  #工作时长    effective_work_time_1date = 0  #生产工时    theory_work_time_1date = 7  #理论生产工时    testCase_write_sum = 0  #测试用例编写量    testCas_operate_sum = 0    bug_submit_sum = 0    bug_verificate_sum = 0    testCase_write_time = 0  #测试用例编写时长    testCas_operate_time = 0    bug_submit_time = 0    bug_verificate_time = 0    for line in report_list:        cur_person = line[0]        cur_date = line[1]        if cur_person == person and (cur_date == date or date=='按周统计'):  #仅当当前行的姓名和日期都满足统计要求时才纳入统计。否则跳过。            job_type = line[4]            job_time = line[5]            if job_time == '' or job_type == '':                continue            if job_type != '其它':  #当任务类型为其它时,不算入生产工时                effective_work_time_1date += job_time            work_time_1date += job_time            if job_type in ['功能用例执行', '用例编写', 'bug验证']:  #当任务类型属于这3种类型才统计产出效率                testCase_write_count = line[6]                print('testCase_write_count',testCase_write_count,cur_person,cur_date)                testCas_operate_count = line[7]                bug_submit_count = line[8]                bug_verificate_count = line[9]                if testCase_write_count not in ['', '        ', 0]:  #异常值进行保护逻辑                    testCase_write_sum += testCase_write_count                    testCase_write_time += job_time                if testCas_operate_count not in ['', '        ', 0]:                    testCas_operate_sum += testCas_operate_count                    testCas_operate_time += job_time                if bug_submit_count not in ['', '        ', 0]:                    bug_submit_sum += bug_submit_count                    bug_submit_time += job_time                if bug_verificate_count not in ['', '        ', 0]:                    bug_verificate_sum += bug_verificate_count                    bug_verificate_time += job_time    testCase_write_count_per_hour = float(        testCase_write_sum) / testCase_write_time if testCase_write_time != 0 else 'NA'  #当有该任务类型的时间投入时才统计效率。反则为NA    testCas_operate_count_per_hour = float(        testCas_operate_sum) / testCas_operate_time if testCas_operate_time != 0 else 'NA'    bug_submit_count_per_hour = float(bug_submit_sum) / bug_submit_time if bug_submit_time != 0 else 'NA'    bug_verificate_count_per_hour = float(        bug_verificate_sum) / bug_verificate_time if bug_verificate_time != 0 else 'NA'    saturation_degree = float(effective_work_time_1date) / theory_work_time_1date  #计算工作饱和度    time_stats = [work_time_1date, effective_work_time_1date, saturation_degree]  #工作时长相关指标    quantity_stats = [testCase_write_sum, testCas_operate_sum, bug_submit_sum, bug_verificate_sum,                      bug_verificate_count_per_hour]  #工作产出相关指标    effectiveness_stats = [testCase_write_count_per_hour, testCas_operate_count_per_hour, bug_submit_count_per_hour]  #工作效率相关指标    stat_result = [person, date] + time_stats + quantity_stats + effectiveness_stats    return stat_resultdef statistic_by_person_week(report_list, person_list):    '''    对指定人员列表按人按周统计(默认所有记录为同一周的记录)    :param report_list:    :param person_list:    :return:    '''    stat_result_list = []    for person in person_list:        stat_result = get_stat_result(report_list, person)  #分析单人的统计结果        stat_result_list.append(stat_result)    return stat_result_listdef statistic_by_person_date(report_list, person_list, date_list):    '''    对指定人员列表和日期列表进行按人按天统计    :param report_list:    :param person_list:    :param date_list:    :return:    '''    stat_result_list = []    for person in person_list:        for date in date_list:            stat_result = get_stat_result(report_list, person, date)  #分析单人单天的统计结果            stat_result_list.append(stat_result)    return stat_result_listdef xls_write_data(data_list, sht):    '''    保存分析结果    :param data_list:    :param sht:    :return:    '''    for r, time_stat_result in enumerate(data_list):        #从list中读取不同统计指标的值        person = time_stat_result[0]        date = str(time_stat_result[1])        work_time_1date = time_stat_result[2]        effective_work_time_1date = time_stat_result[3]        saturation_degree = time_stat_result[4]        testCase_write_sum = time_stat_result[5]        testCas_operate_sum = time_stat_result[6]        bug_submit_sum = time_stat_result[7]        bug_verificate_sum = time_stat_result[8]        bug_verificate_count_per_hour = time_stat_result[9]        testCase_write_count_per_hour = time_stat_result[10]        testCas_operate_count_per_hour = time_stat_result[11]        bug_submit_count_per_hour = time_stat_result[12]        #将统计指标写入excel        sht.write(r, 0, person)        sht.write(r, 1, date)        sht.write(r, 2, work_time_1date)        sht.write(r, 3, effective_work_time_1date)        sht.write(r, 4, saturation_degree)        sht.write(r, 5, testCase_write_sum)        sht.write(r, 6, testCas_operate_sum)        sht.write(r, 7, bug_submit_sum)        sht.write(r, 8, bug_verificate_sum)        sht.write(r, 9, bug_verificate_count_per_hour)        sht.write(r, 10, testCase_write_count_per_hour)        sht.write(r, 11, testCas_operate_count_per_hour)        sht.write(r, 12, bug_submit_count_per_hour)def statistic_by_person():    '''    按人统计    :return:    '''    summary_file = './report_summary.xls'    data = xlrd.open_workbook(summary_file)    table_report = data.sheets()[0]    row_num = table_report.nrows    report_list = []    person_list = []    date_list = []    for r in range(1, row_num):  #第一行是标题行,跳过        report_row = table_report.row_values(r)        person = report_row[0]        date = report_row[1]        report_list.append(report_row)  #获取行记录列表        person_list.append(person)  #获取人名列表        date_list.append(date)  #获取日期列表    person_list = list(set(person_list))  #去重    date_list = list(set(date_list))    stat_result_list_by_date = statistic_by_person_date(report_list, person_list, date_list)  #按人按天统计    stat_result_list_by_week = statistic_by_person_week(report_list, person_list)  #按人按周统计    #保存分析结果    xls = xlwt.Workbook()    sht1 = xls.add_sheet(r'按人按天分析结果')    xls_write_data(stat_result_list_by_date, sht1)    sht2 = xls.add_sheet(r'按人按周分析结果')    xls_write_data(stat_result_list_by_week, sht2)    xls.save('./report_summary1.xls')if __name__=="__main__":    summary()  #将多人的日报整理到同一个excel文件中report_summary.xls    statistic_by_person() #进行统计分析。分析按人、按项目、按天、按周的指标
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!