excel整理日报

#!/usr/bin/env python3
# -*- coding:utf-8 -*-
# __author__ = 'eason'

import xlrd
import xlwt
import os


def 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_result

def 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_list

def 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_list


def 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() #进行统计分析。分析按人、按项目、按天、按周的指标

转载于:https://www.cnblogs.com/zhaobobo10/p/11001085.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值