失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > java考勤表导出_考勤打卡机导出的excel考勤时间表如何生成实用的考勤表

java考勤表导出_考勤打卡机导出的excel考勤时间表如何生成实用的考勤表

时间:2021-12-20 23:10:01

相关推荐

java考勤表导出_考勤打卡机导出的excel考勤时间表如何生成实用的考勤表

该excel表有如下结构

姓名\日期

周1

周2

周3

周4

周5

张三

7:35

18:02

7:35

18:02

7:46

17:56

李四

7:35

18:02

7:02

18:00

18:02

需要判断每天是否迟到早退,并生成考勤表

用如下自定义函数cal或者cals

Public Function cal(ByVal cs As Range) As Integer

'计算单元格并返回相应值如下'没打卡 1'正常上下班 0'迟到 2'迟到超过2小时 11'早退 3'早退超过2小时 12'迟到+早退 5'迟到+早退分别都超过2小时'只有上班打卡,没有下班打卡 4'只有上班打卡,迟到,没下班打卡 2+4=6'只有下班打卡,没有上班打卡 7'只有下班打卡,早退,没有上班打卡 3+7=10'一天3次打卡记录30'一天n次以上(n>3)打卡记录 N*10=10n'异常打卡 10:00-15:30打卡 8

Const morning_time = "08:00"

Const evening_time = "17:30"

'超过120分钟算旷工

Const offset_point = 120

'单元格每行是一个数组元素lines()

Dim lines() As String

'单元格有多少行

Dim count As Integer

'没打卡-空值,返回1 相当于count=0

If IsEmpty(cs) Thencal= 1

Exit Function

End Ifcount= Len(cs.Text) - Len(Application.WorksheetFunction.Substitute(cs.Text, Chr(10), "")) + 1

'大于3次以上的打卡记录返回10*n

If count >= 3 Thencal= count * 10

Exit Function

End If

'处理只有一条记录的,并计算是否上班

If count = 1 Then

Dim offset_morning, offset_evening As Integeroffset_morning= Hour(CDate(cs.Text) - CDate(morning_time)) * 60 + Minute(CDate(cs.Text) - CDate(morning_time))

offset_evening= Hour(CDate(cs.Text) - CDate(evening_time)) * 60 + Minute(CDate(cs.Text) - CDate(evening_time))'MsgBox offset_morning

If CDate(cs.Text) <= CDate(morning_time) Then

'只有上班打卡,没有下班打卡

cal = 4

'MsgBox cal

Exit Function

End If

If CDate(cs.Text) >= CDate(evening_time) Then

'只有下班打卡,没有上班班打卡

cal = 7

Exit Function

End If

If (CDate(cs.Text) > CDate(morning_time)) And (CDate(cs.Text) < CDate(evening_time)) Then

If offset_morning < 120 Then

'只有上班打卡,迟到,没有下班打卡

cal = 6

ElseIf offset_evening < 120 Then

'只有下班打卡,早退,没有上班打卡

cal = 10

Else

'异常打卡

cal = 8

End If

Exit Function

End If

'count=1

End If

'count=2

Dim line1, line2 As String

Dim moring_tmp, evening_tmp As Integermorning_tmp= 0evening_tmp= 0

'提取第一行打卡和第二行打卡时间line1是上班打卡,line2是下班打卡

line1 = Left(cs.Text, 5)

line2= Split(cs.Text, Chr(10))(1)'MsgBox "line1:" & line1'MsgBox "line2:" & line2

'分别给出 morning_tmp值:如果line1早于8点则返回0,晚于8点且不超过2小时为迟到2,超过2小时取值11

offset_morning= Hour(CDate(line1) - CDate(morning_time)) * 60 + Minute(CDate(line1) - CDate(morning_time))

offset_evening= Hour(CDate(line2) - CDate(evening_time)) * 60 + Minute(CDate(line2) - CDate(evening_time))'MsgBox offset_morning'MsgBox offset_evening

If CDate(line1) <= CDate(morning_time) Then

'正常上班打卡早于8点

morning_tmp = 0

ElseIf (CDate(line1) > CDate(morning_time)) And (offset_morning < 120) Then

'上班迟到

morning_tmp = 2

Else

'上班迟到超过2小时

morning_tmp = 11

End If

'分别给出 evening_tmp值:如果line2晚于于17:30则返回0,早于17:30且不超过2小时为早退取值3,超过2小时给值12,

If CDate(line2) >= CDate(evening_time) Then

'正常下班打卡

evening_tmp = 0

ElseIf (CDate(line2) < CDate(evening_time)) And (offset_evening < 120) Then

'早退

evening_tmp = 3

Else

'早退超过2小时

evening_tmp = 12

End If

'最终cal= morning_tmp+evening_tmp

cal = morning_tmp +evening_tmpEnd Function

Public Function cals(ByVal cs As Range) As String

'计算单元格并返回相应值如下'没打卡 1'正常上下班 0'迟到 2'迟到超过2小时 11'早退 3'早退超过2小时 12'迟到+早退 5'迟到+早退分别都超过2小时'只有上班打卡,没有下班打卡 4'只有上班打卡,迟到,没下班打卡 2+4=6'只有下班打卡,没有上班打卡 7'只有下班打卡,早退,没有上班打卡 3+7=10'一天3次打卡记录30'一天n次以上(n>3)打卡记录 N*10=10n'异常打卡 10:00-15:30打卡 8

Const morning_time = "08:00"

Const evening_time = "17:30"

'超过120分钟算旷工

Const offset_point = 120

'单元格每行是一个数组元素lines()

Dim lines() As String

'单元格有多少行

Dim count As Integer

'没打卡-空值,返回1 相当于count=0

If IsEmpty(cs) Thencals= "休息"

Exit Function

End Ifcount= Len(cs.Text) - Len(Application.WorksheetFunction.Substitute(cs.Text, Chr(10), "")) + 1

'大于3次以上的打卡记录返回10*n

If count >= 3 Thencals= "异常打卡" & CStr(count) & "次"

Exit Function

End If

'处理只有一条记录的,并计算是否上班

If count = 1 Then

Dim offset_morning, offset_evening As Integeroffset_morning= Hour(CDate(cs.Text) - CDate(morning_time)) * 60 + Minute(CDate(cs.Text) - CDate(morning_time))

offset_evening= Hour(CDate(cs.Text) - CDate(evening_time)) * 60 + Minute(CDate(cs.Text) - CDate(evening_time))'MsgBox offset_morning

If CDate(cs.Text) <= CDate(morning_time) Then

'只有上班打卡,没有下班打卡

cals = "无下班打卡"

'MsgBox cal

Exit Function

End If

If CDate(cs.Text) >= CDate(evening_time) Then

'只有下班打卡,没有上班班打卡

cals = "无上班打卡"

Exit Function

End If

If (CDate(cs.Text) > CDate(morning_time)) And (CDate(cs.Text) < CDate(evening_time)) Then

If offset_morning < 120 Then

'只有上班打卡,迟到,没有下班打卡

cals = "迟到,无下班打卡"

ElseIf offset_evening < 120 Then

'只有下班打卡,早退,没有上班打卡

cals = "早退,无上班打卡"

Else

'异常打卡

cals = "10点15点30之间异常打卡"

End If

Exit Function

End If

'count=1

End If

'count=2

Dim line1, line2 As String

Dim moring_tmp, evening_tmp As Integermorning_tmp= 0evening_tmp= 0

'提取第一行打卡和第二行打卡时间line1是上班打卡,line2是下班打卡

line1 = Left(cs.Text, 5)

line2= Split(cs.Text, Chr(10))(1)'MsgBox "line1:" & line1'MsgBox "line2:" & line2

'分别给出 morning_tmp值:如果line1早于8点则返回0,晚于8点且不超过2小时为迟到2,超过2小时取值11

offset_morning= Hour(CDate(line1) - CDate(morning_time)) * 60 + Minute(CDate(line1) - CDate(morning_time))

offset_evening= Hour(CDate(line2) - CDate(evening_time)) * 60 + Minute(CDate(line2) - CDate(evening_time))'MsgBox offset_morning'MsgBox offset_evening

If CDate(line1) <= CDate(morning_time) Then

'正常上班打卡早于8点

morning_tmp = 0

ElseIf (CDate(line1) > CDate(morning_time)) And (offset_morning < 120) Then

'上班迟到

morning_tmp = 2

Else

'上班迟到超过2小时

morning_tmp = 11

End If

'分别给出 evening_tmp值:如果line2晚于于17:30则返回0,早于17:30且不超过2小时为早退取值3,超过2小时给值12,

If CDate(line2) >= CDate(evening_time) Then

'正常下班打卡

evening_tmp = 0

ElseIf (CDate(line2) < CDate(evening_time)) And (offset_evening < 120) Then

'早退

evening_tmp = 3

Else

'早退超过2小时

evening_tmp = 12

End If

'最终cal= morning_tmp+evening_tmp

'MsgBox morning_tmp + evening_tmp

Select Case (morning_tmp +evening_tmp)Case 0cals= "全勤"

Case 1cals= "休息"

Case 2cals= "迟到"

Case 3cals= "早退"

Case 4cals= "无下班打卡"

Case 5cals= "迟到+早退"

Case 6cals= "上班迟到,下班没打卡"

Case 7cals= "无上班打卡"

Case 8cals= "10:00-15:30异常打卡"

Case 10cals= "早退,无上班打卡"

Case 11cals= "迟到超2小时"

Case 12cals= "早退超2小时"

Case 23cals= "迟到早退都超2小时"

Case Elsecalse= "异常打卡" & CStr(morning_tmp + evening_tmp) & "次"

End Select

End Function

Public Function cal(ByVal cs As Range) As Integer

'计算单元格并返回相应值如下'没打卡 1'正常上下班 0'迟到 2'迟到超过2小时 11'早退 3'早退超过2小时 12'迟到+早退 5'迟到+早退分别都超过2小时'只有上班打卡,没有下班打卡 4'只有上班打卡,迟到,没下班打卡 2+4=6'只有下班打卡,没有上班打卡 7'只有下班打卡,早退,没有上班打卡 3+7=10'一天3次打卡记录30'一天n次以上(n>3)打卡记录 N*10=10n'异常打卡 10:00-15:30打卡 8Const morning_time = "08:00"Const evening_time = "17:30"'超过120分钟算旷工Const offset_point = 120

'单元格每行是一个数组元素lines()Dim lines() As String'单元格有多少行Dim count As Integer

'没打卡-空值,返回1 相当于count=0If IsEmpty(cs) Then cal = 1 Exit FunctionEnd If

count = Len(cs.Text) - Len(Application.WorksheetFunction.Substitute(cs.Text, Chr(10), "")) + 1

'大于3次以上的打卡记录返回10*nIf count >= 3 Then cal = count * 10 Exit FunctionEnd If

'处理只有一条记录的,并计算是否上班If count = 1 Then

Dim offset_morning, offset_evening As Integer

offset_morning = Hour(CDate(cs.Text) - CDate(morning_time)) * 60 + Minute(CDate(cs.Text) - CDate(morning_time))offset_evening = Hour(CDate(cs.Text) - CDate(evening_time)) * 60 + Minute(CDate(cs.Text) - CDate(evening_time))'MsgBox offset_morning If CDate(cs.Text) <= CDate(morning_time) Then ' 只有上班打卡,没有下班打卡 cal = 4 'MsgBox cal Exit Function End If If CDate(cs.Text) >= CDate(evening_time) Then ' 只有下班打卡,没有上班班打卡 cal = 7 Exit Function End If If (CDate(cs.Text) > CDate(morning_time)) And (CDate(cs.Text) < CDate(evening_time)) Then If offset_morning < 120 Then'只有上班打卡,迟到,没有下班打卡cal = 6 ElseIf offset_evening < 120 Then '只有下班打卡,早退,没有上班打卡cal = 10 Else '异常打卡cal = 8 End If Exit Function End If 'count=1End If

'count=2Dim line1, line2 As StringDim moring_tmp, evening_tmp As Integermorning_tmp = 0evening_tmp = 0'提取第一行打卡和第二行打卡时间line1是上班打卡,line2是下班打卡line1 = Left(cs.Text, 5)line2 = Split(cs.Text, Chr(10))(1)'MsgBox "line1:" & line1'MsgBox "line2:" & line2

'分别给出 morning_tmp值:如果line1早于8点则返回0,晚于8点且不超过2小时为迟到2,超过2小时取值11

offset_morning = Hour(CDate(line1) - CDate(morning_time)) * 60 + Minute(CDate(line1) - CDate(morning_time))offset_evening = Hour(CDate(line2) - CDate(evening_time)) * 60 + Minute(CDate(line2) - CDate(evening_time))

'MsgBox offset_morning'MsgBox offset_evening

If CDate(line1) <= CDate(morning_time) Then ' 正常上班打卡早于8点 morning_tmp = 0 ElseIf (CDate(line1) > CDate(morning_time)) And (offset_morning < 120) Then ' 上班迟到 morning_tmp = 2 Else ' 上班迟到超过2小时 morning_tmp = 11End If

'分别给出 evening_tmp值:如果line2晚于于17:30则返回0,早于17:30且不超过2小时为早退取值3,超过2小时给值12,

If CDate(line2) >= CDate(evening_time) Then ' 正常下班打卡 evening_tmp = 0 ElseIf (CDate(line2) < CDate(evening_time)) And (offset_evening < 120) Then ' 早退 evening_tmp = 3 Else ' 早退超过2小时 evening_tmp = 12End If

'最终cal= morning_tmp+evening_tmpcal = morning_tmp + evening_tmp

End Function

Public Function cals(ByVal cs As Range) As String

'计算单元格并返回相应值如下'没打卡 1'正常上下班 0'迟到 2'迟到超过2小时 11'早退 3'早退超过2小时 12'迟到+早退 5'迟到+早退分别都超过2小时'只有上班打卡,没有下班打卡 4'只有上班打卡,迟到,没下班打卡 2+4=6'只有下班打卡,没有上班打卡 7'只有下班打卡,早退,没有上班打卡 3+7=10'一天3次打卡记录30'一天n次以上(n>3)打卡记录 N*10=10n'异常打卡 10:00-15:30打卡 8Const morning_time = "08:00"Const evening_time = "17:30"'超过120分钟算旷工Const offset_point = 120

'单元格每行是一个数组元素lines()Dim lines() As String'单元格有多少行Dim count As Integer

'没打卡-空值,返回1 相当于count=0If IsEmpty(cs) Then cals = "休息" Exit FunctionEnd If

count = Len(cs.Text) - Len(Application.WorksheetFunction.Substitute(cs.Text, Chr(10), "")) + 1

'大于3次以上的打卡记录返回10*nIf count >= 3 Then cals = "异常打卡" & CStr(count) & "次" Exit FunctionEnd If

'处理只有一条记录的,并计算是否上班If count = 1 Then

Dim offset_morning, offset_evening As Integer

offset_morning = Hour(CDate(cs.Text) - CDate(morning_time)) * 60 + Minute(CDate(cs.Text) - CDate(morning_time))offset_evening = Hour(CDate(cs.Text) - CDate(evening_time)) * 60 + Minute(CDate(cs.Text) - CDate(evening_time))'MsgBox offset_morning If CDate(cs.Text) <= CDate(morning_time) Then ' 只有上班打卡,没有下班打卡 cals = "无下班打卡" 'MsgBox cal Exit Function End If If CDate(cs.Text) >= CDate(evening_time) Then ' 只有下班打卡,没有上班班打卡 cals = "无上班打卡" Exit Function End If If (CDate(cs.Text) > CDate(morning_time)) And (CDate(cs.Text) < CDate(evening_time)) Then If offset_morning < 120 Then'只有上班打卡,迟到,没有下班打卡cals = "迟到,无下班打卡" ElseIf offset_evening < 120 Then '只有下班打卡,早退,没有上班打卡cals = "早退,无上班打卡" Else '异常打卡cals = "10点15点30之间异常打卡" End If Exit Function End If 'count=1End If

'count=2Dim line1, line2 As StringDim moring_tmp, evening_tmp As Integermorning_tmp = 0evening_tmp = 0'提取第一行打卡和第二行打卡时间line1是上班打卡,line2是下班打卡line1 = Left(cs.Text, 5)line2 = Split(cs.Text, Chr(10))(1)'MsgBox "line1:" & line1'MsgBox "line2:" & line2

'分别给出 morning_tmp值:如果line1早于8点则返回0,晚于8点且不超过2小时为迟到2,超过2小时取值11

offset_morning = Hour(CDate(line1) - CDate(morning_time)) * 60 + Minute(CDate(line1) - CDate(morning_time))offset_evening = Hour(CDate(line2) - CDate(evening_time)) * 60 + Minute(CDate(line2) - CDate(evening_time))

'MsgBox offset_morning'MsgBox offset_evening

If CDate(line1) <= CDate(morning_time) Then ' 正常上班打卡早于8点 morning_tmp = 0 ElseIf (CDate(line1) > CDate(morning_time)) And (offset_morning < 120) Then ' 上班迟到 morning_tmp = 2 Else ' 上班迟到超过2小时 morning_tmp = 11End If

'分别给出 evening_tmp值:如果line2晚于于17:30则返回0,早于17:30且不超过2小时为早退取值3,超过2小时给值12,

If CDate(line2) >= CDate(evening_time) Then ' 正常下班打卡 evening_tmp = 0 ElseIf (CDate(line2) < CDate(evening_time)) And (offset_evening < 120) Then ' 早退 evening_tmp = 3 Else ' 早退超过2小时 evening_tmp = 12End If

'最终cal= morning_tmp+evening_tmp

'MsgBox morning_tmp + evening_tmpSelect Case (morning_tmp + evening_tmp)

Case 0cals = "全勤"Case 1cals = "休息"Case 2 cals = "迟到"Case 3 cals = "早退"Case 4 cals = "无下班打卡"Case 5 cals = "迟到+早退"Case 6 cals = "上班迟到,下班没打卡"Case 7 cals = "无上班打卡"Case 8 cals = "10:00-15:30异常打卡"Case 10 cals = "早退,无上班打卡"Case 11 cals = "迟到超2小时"Case 12 cals = "早退超2小时"Case 23 cals = "迟到早退都超2小时"Case Else calse = "异常打卡" & CStr(morning_tmp + evening_tmp) & "次"

End Select

End Function

如果觉得《java考勤表导出_考勤打卡机导出的excel考勤时间表如何生成实用的考勤表》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。