您的位置:首页 > Web前端 > JavaScript

用js处理打卡记录excel表

2016-09-23 17:05 176 查看
首张图片是待处理的excel表,文章最后是处理结果,如果您是要这种效果,中间内容不妨看一下。

不需要数据库,不需要服务,只要一个excel一个谷歌浏览器,搞定这些。

因为js没有上传excel表的功能,我们简单处理下excel表,把内容粘贴出来,把一切作为字符串来处理。

首先,处理下excel表中的数据,每一行行首和行尾,用英文中括号‘[]’括起来,如下,很简单,加两列,用公式计算一下第一行的单元格,下拉搞定所有。





==========================================================================================================================

其次,复制前两列,粘贴到http://tool.oschina.net/codeformat/html,格式化一下字符串,此步骤可以省略,如下:



==========================================================================================================================

将字符串记为str,打卡合格次数记为times,执行orderList(str,times)函数。

==========================================================================================================================

把如下代码粘贴到浏览器的console中:

str = ' [李白 2016-01-20,5:30-20:30] [王白 2016-01-20,5:30-20:31] [金白 2016-01-20,5:30-20:32] [王白 2016-01-20,5:30-20:33] [李白 2016-01-20,5:30-20:34] [金白 2016-01-20,5:30-20:35] [金白 2016-01-20,5:30-20:36] [赵白 2016-01-20,5:30-20:37] [郝白 2016-01-20,5:30-20:38] [郝白
2016-01-20,5:30-20:39] [郝白 2016-01-20,5:30-20:40] [王白 2016-01-20,5:30-20:41] [赵白 2016-01-20,5:30-20:42] [王白 2016-01-20,5:30-20:43] [郝白 2016-01-20,5:30-20:44] [王白 2016-01-20,5:30-20:45] [王白 2016-01-20,5:30-20:46] ',

times = 4,

//Merge rows

function orderList(str,times){

    namelist = [];

    str.match(/\[[^\]]+\]/g).map(function(item,index,array){

        return item.replace(/[^\u4e00-\u9fa5]/gi,""); 

    }).sort().reduce(function(prev,cur,index,array){

        if(prev.indexOf(cur)<0 || index==1){

           namelist.push(cur);

         }

        return prev+cur;

    });

    return namelist.map(function(item,index,array){

      var order = str.match(/\[[^\]]+\]/g).join().match(new RegExp('\\['+item.toString()+'[^\\]]+\\]','g'));

      var l = 0;

      if(order && order!=null && order != '')

        l = order.length;

      if(l<times) 

        return '姓名:'+item + ',共计:' + l + ',明细:' + order;

      else

        return '姓名:'+item + ':ok!';

    }).sort(function(v1,v2){

      var p = /ok!/g;

      if(p.test(v1) && p.test(v2))

        return 0;

      else if(p.test(v1) && !p.test(v2))

        return 1;

      else

        return -1;

    }).join('\n');

}(str,times)

代码的详细介绍参考另一篇文章:http://blog.csdn.net/june_ruikang/article/details/52640823,可从同类文章中查找

=======================================================================================================================

点击回车,执行后结果如下:

"姓名:李白,共计:2,明细:[李白 2016-01-20,5:30-20:30],[李白 2016-01-20,5:30-20:34]

姓名:赵白,共计:2,明细:[赵白 2016-01-20,5:30-20:37],[赵白 2016-01-20,5:30-20:42]

姓名:金白,共计:3,明细:[金白 2016-01-20,5:30-20:32],[金白 2016-01-20,5:30-20:35],[金白 2016-01-20,5:30-20:36]

姓名:郝白:ok!

姓名:王白:ok!"
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: