#!/usr/bin/env python3
import openpyxl as oxl
import numpy
import string
import time
import datetime
def writeExcel( line ):
return
class item:
def __init__(self):
self.daynum=0
self.no=''
self.empNo=''
self.name=''
self.deptName=''
self.time=''
self.status=''
self.nu=''
self.channel=''
self.type=''
#同一天序号 姓名 分组 日期 打卡时间 打卡地点 进出·
# Y Y Y Y Y Y
def writeToExcelFile(day):
wb = oxl.Workbook()
sheet = wb.active
sheet.title = '加班记录'
dayLen = len(day)
for i in range(0, dayLen):
print("day[i]",i, day[i])
sheet.cell(row=i+1, column=1,value=str(day[i].daynum))
sheet.cell(row=i+1, column=2,value=str(day[i].name))
sheet.cell(row=i+1, column=3,value=str(day[i].deptName))
sheet.cell(row=i+1, column=4,value=str(day[i].time[0:10]))
sheet.cell(row=i+1, column=5,value=str(day[i].time))
sheet.cell(row=i+1, column=6,value=str(day[i].channel))
sheet.cell(row=i+1, column=7,value=str(day[i].type))
#for j in range( 0, len(day[i])): ##(0,9)
# sheet.cell(row=i+1, column=j+1, value=str(value[i][j]))
wb.save("xxxx.xlsx")
return
def parseOneDayOvertimeWork(day, allday, cnt, allrows):
lenDay = len(day)
if(lenDay < 1 ):
return
num = lenDay - 1
dayInfo=day[num]
alltime = 0.0000
if(0==num%2):
print("出入次数不匹配,无法计算!最后一次时间:%s, 状态:%s",dayInfo.time, dayInfo.status)
return
timeArray = time.strptime(dayInfo.time,"%Y/%m/%d %H:%M:%S")
if(timeArray.tm_wday < 5 and timeArray.tm_hour < 20 and dayInfo.status=="出"):
return
if(timeArray.tm_wday < 5 and timeArray.tm_hour > 20 ):
i = num
while 1:
strutime_1 = time.strptime(day[i].time,"%Y/%m/%d %H:%M:%S")
strutime = time.strptime(day[i-1].time,"%Y/%m/%d %H:%M:%S")
if( strutime_1.tm_hour < 18 ):
break
if( strutime.tm_hour < 18 ):
alltime += time.mktime(strutime_1) - time.mktime(time.strptime(day[i].time[0:10]+" 18:00:00","%Y/%m/%d %H:%M:%S"))
break
alltime += time.mktime(strutime_1) - time.mktime(strutime)
i -= 2
if(timeArray.tm_wday > 4 ):
i = num
while 1:
if( i <= 0 ):
break
strutime_1 = time.strptime(day[i].time,"%Y/%m/%d %H:%M:%S")
strutime = time.strptime(day[i-1].time,"%Y/%m/%d %H:%M:%S")
alltime += time.mktime(strutime_1) - time.mktime(strutime)
i -= 2
if(alltime/3600 >= 2 ):
print( "day:%s,加班时常alltime:%f",day[0].time[0:10],alltime/3600)
cnt[0] = cnt[0] + 1
for i in range(len(day)):
day[i].daynum=cnt[0]
for j in range(len(day)):
allday.append(day[j])
allrows[0] = allrows[0] + len(day)
def parseWorkOvertime(data):
day=list()
allday = list()
dataLen = len(data)
cnt = [0]
allrows = [0]
for i in range(dataLen):
it = item()
it_1 = item()
it = data[i]
it_1 = data[i]
if( i+1 < dataLen):
it_1 = data[i+1]
time = it.time
time_1 = it_1.time
day.append(it)
if(time[0:10] != time_1[0:10] or i+1==dataLen):
parseOneDayOvertimeWork(day, allday, cnt, allrows)
day=[]
## last, write excel
writeToExcelFile(allday)
##end of func parseWorkOvertime
if __name__ == "__main__":
overFlag=0
fp = open("data.txt")
data = list()
while 1:
it = item()
t = list()
for i in range(9):
line = fp.readline().strip('\n')
if not line:
overFlag=1
break
if(len(line)<1):
continue
#print(line)
t.append(line)
if 1==overFlag:
break;
it.no,it.empNo,it.name,it.deptName,it.time,it.status,it.nu,it.channel,it.type=\
t[0],t[1],t[2],t[3],t[4],t[5],t[6],t[7],t[8]
#print(it.deptName)
data.append(it)
##end while 1
print("end while....")
itx = data[0]
print("itx--->",itx.deptName)
parseWorkOvertime(data)
## end of __main__