找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 154580|回复: 67

[已解决]VBS处理考勤报表(100元有偿)

  [复制链接]
发表于 2015-11-25 19:33:18 | 显示全部楼层 |阅读模式
内容与说明在附件“结果表格”

注意:源表格文件名有[]符号,要求处理目录下所有xls表格(现实只有一个表格。但表格名不确定、带有[]符号)
要求日期从 1-31 ,星期一到星期五,排序,删除上班或下班重复打卡时间,提取最前打卡时间为准、

信誉方面:请放心,只要采纳了、百分百支付

aa77dd@163.com(已解决)已经交易
发表于 2015-11-25 20:03:10 | 显示全部楼层
请问楼主的结果表格是如何得到的, 看到 把 2800+ 行数据整理成了 1800+ 行数据, 我了解的考勤机通常都带软件的, 当然不一定易用
 楼主| 发表于 2015-11-25 20:06:30 | 显示全部楼层
这个是服务器下载下来的
 楼主| 发表于 2015-11-25 20:07:06 | 显示全部楼层
回复 2# aa77dd@163.com


这个是服务器下载下来的
发表于 2015-11-26 00:14:20 | 显示全部楼层
本帖最后由 523066680 于 2015-11-26 00:17 编辑

你们公司员工姓名……,做过化名处理没有
发表于 2015-11-26 00:37:39 | 显示全部楼层
谁啊,老设置成作者可见。
发表于 2015-11-26 02:46:45 | 显示全部楼层
回复 6# 依山居


    因为是 『有偿求助区』
 楼主| 发表于 2015-11-26 08:38:48 | 显示全部楼层
回复 5# 523066680


    没有,是原名
发表于 2015-11-26 13:11:47 | 显示全部楼层
必须是vbs吗
 楼主| 发表于 2015-11-26 13:19:59 | 显示全部楼层
回复 9# zrc20d


只要方法快就行, VBS更好,数据条有很多,有时会有十万条
发表于 2015-11-26 13:32:56 | 显示全部楼层

标题

本帖最后由 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
 楼主| 发表于 2015-11-26 13:48:37 | 显示全部楼层
回复 11# wankoilz


    看清说明:是xls
 楼主| 发表于 2015-11-26 14:01:48 | 显示全部楼层
回复 11# wankoilz


   我要的是直接处理xls表格
上班与下班时间没有分开,比哪上班打了,下班没有打,下班时间段单元格为空。还有升旗与早读也没有判断
 楼主| 发表于 2015-11-26 14:04:04 | 显示全部楼层
回复 11# wankoilz


    星期判断也有误,没有看到星期1,还有星期六与日是不存在日期里的,因为我在表格里自动换星期全是在1到5的
发表于 2015-11-26 16:03:43 | 显示全部楼层
xls里的要求,有些描述不是特别清楚,这4个小问题:
满足以上任一条件:下班时间移动到"正常下班"对应列,并在考勤列增加 "1" 对应
problem1:"正常下班"对应列        是不是[下班]列?

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

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

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-17 00:30 , Processed in 0.021846 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表