看到公司小行政每次统计人员出入表格很辛苦,毕竟5万多数据,纯人工还是很费劲的,索性花一下午给写个机器自动化读取 :)
至于为什么不把出入登记写成 wabapp 方便使用。。。这个需要权限,小技术还是不得瑟了。
node-xlsx
读取 excel 文件采用了 node-xlsx 这个库。
常用api:
1 | // import node-xlsx |
读取到的数据类似 Build 要传入的数据,是数组嵌套数组,第一层是表格,下一层就是表格内的每条数据,空格不会计入数组。
拿到数据后我们继续处理。
初步处理
因为读取到的数据非常零散,不方便阅读,所以第一步做了如下设计:
1 | var objs = { |
按日期设统计数据,首先收集到基础的进出次数,然后统计到每种方式的进出时间点到数组。
但在正式开始写代码前,第一件事其实是过滤无效数据,真不能高看人的智商4万4的数据,实际有效的只有三万9,百分之十就是人的出错率;
计算时间差值是否超过规定
单独拿出判断出入时间是否超时的逻辑,首先判断类型,每种类型的超时时间不同,然后排除所有上大号的数据;
用出入计算时间差,但实际会有人有只输入出,或者只输入入的情况,行政说一般这样的就直接pass;
思考这里的逻辑后给出如下代码:
1 | var flagtime = ''; |
- 如果:
C C R C R
多余一次是出,那临时时间保留flagtime
就会被下次 c 覆盖,就 pass 了, - 如果:
R C R C R
多余一次是入,而且在开头,那时间处理函数返回字符串或NaN,显然不会大于1,就不会计入超时,就pass了, - 如果:
C R R C R
多余一次是入,而且在中间,这时候判断上次是否和这次相同,相同就pass。
事实上主要逻辑就是判断时间是否超时,其他一些数据拼接就不过多赘述,可以点此查看源代码