[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
回复 17# fcxk

不知道为什么你那边星期显示不对,太累不想弄了,等其他兄弟发挥。

TOP

回复 22# fcxk


  
谢永香        2015-11-20 7:10        2015-11-20        星期五
谢永香        2015-11-20 11:08        2015-11-20        星期五
谢永香        2015-11-20 11:15        2015-11-20        星期五

上面情形怎么处理? 7:10 是有效上班打卡, 而 11:08 下班打卡时间未到, 是否算早退, 11:15 是否计作有效下班打卡

TOP

回复 20# 523066680


    条件时段:同一日期出现双上班或下班时间,提取最先一次时间,意思就是删除7:49,上班时间为7:19分,下班为空。
爱情不是一颗心去敲另一颗心、而是两颗心擦出火花。

TOP

回复 20# 523066680

早班上班的重复打卡, 只保留一个有效的记录 7:19

TOP

在结果.xls 里面,有个:

陈云琳       
2015/11/11        星期三        7:49
2015/11/11        星期三        7:19

7:49算啥?

TOP

回复 18# fcxk


    好的,thx

TOP

本帖最后由 fcxk 于 2015-11-26 16:39 编辑

回复 15# zrc20d


    1.满足以上任一条件:下班时间移动到"正常下班"对应列,并在考勤列增加 "1" 对应
   
   比如:源文件里
    07:20分上班,
   11:10分下班
   是同一列
要求把:上班下班分成两列,07:20分在上班列,11:10分在下班列,满足条件时:考勤列加1,不满足时,考勤列不处理。

2.星期二、星期四 上班:07:30分之内 、在早读列增加"1
  只是判断上班时间,只要上班打卡时间在06:00-07:20之间 即可

3.自动调整每个条件的上班与下班时间匹配、没有时间的为空格。

前面第一有说明、没有时间为空格,比如:上班 07:20分,下班没有打卡,所以下班为空格。空格就是没有数据,没有打卡。

每个时间段源文件有说明、比如:16号,打卡的时间为:

07:20
14:20
21:10

则说明:上班为07:20   下班为空
           上班为14:20   下班为空
           晚修上班为空、  下班21:10
空就是没有打卡
爱情不是一颗心去敲另一颗心、而是两颗心擦出火花。

TOP

回复 16# wankoilz


对啊, 排序也有问题。很乱
爱情不是一颗心去敲另一颗心、而是两颗心擦出火花。

TOP

回复 14# fcxk
我这儿是对的
1.结果是有周末信息,你 结果.xls 里面也有周末的刷卡信息
2.其他统计正常,唯一不足是日期排列顺序不规则
3.csv文件可以直接用excel导入,再另存为xls
4.说这些并非要楼主采纳哈,仅仅想说明除了日期排列不规则,我的代码能完成其他要求

TOP

xls里的要求,有些描述不是特别清楚,这4个小问题:
满足以上任一条件:下班时间移动到"正常下班"对应列,并在考勤列增加 "1" 对应
problem1:"正常下班"对应列        是不是[下班]列?

星期二、星期四 上班:07:30分之内 、在早读列增加"1"
problem2:是否要求满足"条件1"?
        还是
        只要上班打卡时间在06:00-07:30之间 即可?
星期一 上班:07:20分之内、在升旗列增加"1"
problem3:是否要求满足"条件1"?
        还是
        只要上班打卡时间在06:00-07:20之间 即可?

自动调整每个条件的上班与下班时间匹配、没有时间的为空格。
problem4:如果有打卡时间,但是不符合三个条件中的任何一个,即时间在要求打卡的时间之外
        那么:打卡时间是否要记录?相应的打卡记录是否要标记为1

TOP

回复 11# wankoilz


    星期判断也有误,没有看到星期1,还有星期六与日是不存在日期里的,因为我在表格里自动换星期全是在1到5的
爱情不是一颗心去敲另一颗心、而是两颗心擦出火花。

TOP

回复 11# wankoilz


   我要的是直接处理xls表格
上班与下班时间没有分开,比哪上班打了,下班没有打,下班时间段单元格为空。还有升旗与早读也没有判断
爱情不是一颗心去敲另一颗心、而是两颗心擦出火花。

TOP

回复 11# wankoilz


    看清说明:是xls
爱情不是一颗心去敲另一颗心、而是两颗心擦出火花。

TOP

标题

本帖最后由 wankoilz 于 2015-11-26 13:55 编辑

练习awk!!
将源文件导出为csv文件(逗号分隔),拖拽执行,得到result.csv
  1. # & cls & gawk -f %0 %1 & pause & exit
  2. BEGIN{
  3. FS=",| "
  4. check[1][1]=600;check[1][2]=815;check[1][3]=1111;check[1][4]=1230
  5. check[2][1]=1400;check[2][2]=1500;check[2][3]=1610;check[2][4]=1810
  6. check[3][1]=1830;check[3][2]=1910;check[3][3]=2100;check[3][4]=2200
  7. }
  8. NR>1{
  9. sub(/:/,"",$8)
  10. arr[$3][$7]=arr[$3][$7]""$8" "
  11. }
  12. END{
  13. #统计数据
  14. asorti(arr,ta)
  15. for(id in ta){
  16. name=ta[id]
  17. for(day in arr[name]){
  18. split(arr[name][day],arrTime," ")
  19. for(x in check){
  20. earlierFlag=0;laterFlag=0
  21. for(y in arrTime){
  22. if(arrTime[y]>=check[x][1]&&arrTime[y]<=check[x][2]){earlierFlag=1;earlierTime=arrTime[y]}
  23. if(arrTime[y]>=check[x][3]&&arrTime[y]<=check[x][4]){laterFlag=1;laterTime=arrTime[y]}
  24. }
  25. #分类统计几种情况
  26. if(earlierFlag && laterFlag){
  27. sub(earlierTime,"",arr[name][day])
  28. sub(laterTime,"",arr[name][day])
  29. arr[name"-"day]=arr[name"-"day]" "earlierTime","laterTime",1,"
  30. sTmp="";arrTotal[name]++
  31. if(earlierTime>=1830){sTmp="1,"}else{sTmp=","}
  32. fday=gensub("/"," ","g",day)
  33. weekday=strftime("%A",mktime(fday" 0 0 0"))
  34. if((weekday=="星期二"||weekday=="星期四")&&earlierTime<=730){
  35. sTmp=sTmp"1,"
  36. }else{
  37. sTmp=sTmp","
  38. }
  39. if(weekday=="星期一"&&earlierTime<=720){sTmp=sTmp"1,"}else{sTmp=sTmp","}
  40. arr[name"-"day]=arr[name"-"day]""sTmp
  41. }
  42. }
  43. }
  44. }
  45. #打印处理
  46. print "姓名,打卡日期,星期,上班,下班,考勤段数,晚修段,早读,升旗,个人总段" >"result.csv"
  47. for(id in ta){
  48. name=ta[id]
  49. for(day in arr[name]){
  50. fday=gensub("/"," ","g",day)
  51. weekday=strftime("%A",mktime(fday" 0 0 0"))
  52. split(arr[name][day],arrTime," ")
  53. for(x in arrTime){
  54. if(!isFirst[name]++){
  55. tPrint=name","day","weekday","arrTime[x]",,,,,,"arrTotal[name]
  56. }else{
  57. tPrint=","day","weekday","arrTime[x]
  58. }
  59. sPrint=sPrint""tPrint"\n"
  60. }
  61. if(length(arr[name"-"day])){
  62. split(arr[name"-"day],arrRight," ")
  63. for(x in arrRight){
  64. if(!isFirst[name]++){
  65. tPrint=name","day","weekday","arrRight[x]""arrTotal[name]
  66. }else{
  67. tPrint=","day","weekday","arrRight[x]
  68. }
  69. sPrint=sPrint""tPrint"\n"
  70. }
  71. }
  72. }
  73. }
  74. #去掉最后一个换行符
  75. sPrint=substr(sPrint,1,length(sPrint)-1)
  76. split(sPrint,arrLine,"\n")
  77. #处理时间格式
  78. for(x in arrLine){
  79. split(arrLine[x],arrCol,",");arrLine[x]=""
  80. len=length(arrCol[4])
  81. arrCol[4]=substr(arrCol[4],1,len-2)":"substr(arrCol[4],len-1,2)
  82. if(len=length(arrCol[5])){
  83. arrCol[5]=substr(arrCol[5],1,len-2)":"substr(arrCol[5],len-1,2)
  84. }
  85. for(y in arrCol){arrLine[x]=arrLine[x]""arrCol[y]","}
  86. lines=lines""arrLine[x]"\n"
  87. }
  88. print lines >>"result.csv"
  89. }
复制代码
gawk 4.1.0 下载地址:http://www.bathome.net/viewthread.php?tid=21366&highlight=gawk

TOP

回复 9# zrc20d


只要方法快就行, VBS更好,数据条有很多,有时会有十万条
爱情不是一颗心去敲另一颗心、而是两颗心擦出火花。

TOP

返回列表