标题: [问题求助] [已解决]VBS实现Excel表格考勤数据统计合并。 [打印本页]
作者: fcxk 时间: 2015-11-20 10:54 标题: [已解决]VBS实现Excel表格考勤数据统计合并。
1. 删除表格 (学校名称、编号、班级、主机编号、物理卡号)
2.合并相同姓名
3.增加(正常段、总正常段列)
4.统计段数: 日期相同时、07:30分之前记录 11:10分之后记录 相同日期两个条记录同时有为正常 1 次
14:30分之前记录 16:10分之后记录 相同日期两个条记录同时有为正常 1 次
19:10分之前记录 21:00分之后记录 相同日期两个条记录同时有为正常 1 次
5.总正常段:姓名正常段数总数。
6.晚修段数:19:10分之前记录 21:00分之后记录 的总正常段
结果为2表格效果
在这先谢谢各位,很急用。。。。。
作者: wankoilz 时间: 2015-11-21 09:01
相同日期是不是只能有一个正常段?
作者: fcxk 时间: 2015-11-21 09:22
本帖最后由 fcxk 于 2015-11-21 09:44 编辑
回复 2# wankoilz
同一日期三个时间段:
07:30分之前(06:00到07:30) 11:10分之后(11:11到12:30) 为一个判断,两个时间要同时满足时才加1次正常,否则不处理
14:30分之前(13:00到14:30) 16:10分之后(16:10到18:00)为一个判断,两个时间要同时满足时才加1次正常,否则不处理
19:10分之前(18:30到19:10) 21:00分之后(21:00到22:00)为一个判断,两个时间要同时满足时才加1次正常,否则不处理
19:10分之前(18:30到19:10) 21:00分之后(21:00到22:00)这个段增加的正常1同时加到晚修总段数列
就是说:
07:30分之前 正常打了卡,但下班是11:00分,或下班时没有打卡、为不处理。要同时满足其中一组条件才行
07:30分之前正常打了卡,11:10分之后正常打了卡,则正常段加1
这个下班时间之后要在中午上班之前的时间段内:比如 11:10分之后(是11:11分到12:30分之前的段才行,因为14:30分又有一个上班时间段)
作者: wankoilz 时间: 2015-11-21 11:14 标题: 标题
本帖最后由 wankoilz 于 2015-11-21 11:28 编辑
哦哦,刚才没仔细看,知道了
白天没时间,晚上用awk试试
作者: wankoilz 时间: 2015-11-21 14:06 标题: 标题
本帖最后由 wankoilz 于 2015-11-21 22:40 编辑
将excel文件导出为csv文件,然后用以下批处理脚本处理,可以统计得到一个半成品
将文件图标拖拽到脚本上执行,看看效果:- # & cls & gawk -f %0 %1 & pause & exit
-
- BEGIN{
- FS=",| "
- check[1][1]=600;check[1][2]=730;check[1][3]=1110;check[1][4]=1230
- check[2][1]=1300;check[2][2]=1430;check[2][3]=1610;check[2][4]=1800
- check[3][1]=1830;check[3][2]=1910;check[3][3]=2100;check[3][4]=2200
- }
- {
- sub(/:/,"",$8)
- arr[$3" "$7]=arr[$3" "$7]""$8","
- }
- END{
- #将arr按姓名排序
- asorti(arr,ta)
- for(x in ta){
- gsub(","," ",arr[ta[x]])
- split(arr[ta[x]],arrTime," ")
- for(y in check){
- earlierFlag=0;laterFlag=0
- for(z in arrTime){
- if(arrTime[z]>=check[y][1]&&arrTime[z]<=check[y][2]){earlierFlag=1;earlierTime=arrTime[z]}
- if(arrTime[z]>=check[y][3]&&arrTime[z]<=check[y][4]){laterFlag=1;laterTime=arrTime[z]}
- }
- if(earlierFlag && laterFlag){
- sub(earlierTime,"",arr[ta[x]])
- sub(laterTime,"",arr[ta[x]])
- arr[ta[x]]=arr[ta[x]]" "earlierTime"-"laterTime
- }
- }
- }
- print "姓名,日期,开始时间,结束时间,标记" >>"result.csv"
- for(x in ta){
- split(arr[ta[x]],arrValue," ")
- for(y in arrValue){
- split(arrValue[y],arrTmp,"-")
- formatTime=""
- for(z in arrTmp){
- len=length(arrTmp[z])
- formatTime=formatTime","substr(arrTmp[z],1,len-2)":"substr(arrTmp[z],len-1,2)
- }
- if(length(formatTime)>6){formatTime=formatTime",1"}
- sub(" ",",",ta[x])
- print ta[x]""formatTime >>"result.csv"
- }
- }
- }
复制代码
gawk 4.1.0 下载地址:http://www.bathome.net/viewthread.php?tid=21366&highlight=gawk
作者: fcxk 时间: 2015-11-21 18:33
回复 5# wankoilz
显示错误。缺少语句
作者: wankoilz 时间: 2015-11-21 20:27
有没有下载gawk?把gawk.exe和批处理放在一起。
作者: fcxk 时间: 2015-11-21 21:13
本帖最后由 fcxk 于 2015-11-21 21:17 编辑
回复 7# wankoilz
下了,好相结果好乱,看不出结果,能用excel吗,与源文件2这样效果
作者: wankoilz 时间: 2015-11-21 21:19
回复 8# fcxk
不是直接双击执行,是通过拖拽图标执行的吧?
作者: fcxk 时间: 2015-11-21 21:25
回复 9# wankoilz
是拖放,按你说的,没有按条件判断加正常1
姓名没有合并
作者: wankoilz 时间: 2015-11-21 22:04
5楼代码更新了,但是单元格合并这个目前没办法,剩下的只需要用vbs调整一下格式
vbs操作excel我不熟悉
作者: fcxk 时间: 2015-11-21 22:32
回复 11# wankoilz
可以,表格第一行能不能不要删除
要是直接可以处理excel就更好了,太感谢
作者: wankoilz 时间: 2015-11-21 22:41
本帖最后由 wankoilz 于 2015-11-21 22:42 编辑
已添加表头
gawk.exe没办法直接处理excel文件
作者: fcxk 时间: 2015-11-22 09:15
回复 13# wankoilz
晚修段好像不会另外一列分开增加1
欢迎光临 批处理之家 (http://bathome.net./) |
Powered by Discuz! 7.2 |