今天老板大发慈悲,发布了一项新规则,正常打卡一次,总时间增加半个小时。同学们喜大普奔,要知道我们被要求一周在实验室打卡满70个小时,要求是指定的时间段,不是早上8点到晚上8点就算12个小时。
助理姐姐心塞了,原以为用了钉钉就不需要她手工算时长了,结果钉钉还是赶不上老板的需求变化之快啊。为了不让这项规则作废,程序员义不容辞的决定用代码拯救大家。
已知条件
钉钉可以生成考勤报表(xls格式),其中包括打卡总时长,每次打卡的情况(正常、无、迟到xxx分钟、早退xxx分钟)
解析xlsx文件,计算出数据后,修改原文件
node-xlsx
这个包可以读写xlsx文件,按照行列读取为二维数组,考勤报表的格式是相对固定的。读取报表,生成姓名-总打卡时长、正常打卡次数的对象,计算出姓名-最终打卡时长
读取、修改、写入后,原文件的着色,单元格合并效果会消失,所以光用node
处理文件还不够,得有界面展示数据
electron
又能方便的绘制界面,又能读取文件,还不用搭服务器,作为前端,当然要用Electron。慕名已久,正好用这个项目练练手。在github上根据文档hello world了以后,就开始动手。
读取文件
1.得到考勤报表文件位置原计划提供“打开文件”按钮和拖拽文件按钮两个方式,但是打开文件的方法略麻烦,果断选择了官网上现有的拖拽文件打开的方法。
2.解析xlsx文件在这一步体会到了Electron的神奇之处。在上一步中,交互行为的描述和在浏览器中基本完全一样,但是又不会有fakePath的情况发生。在这一步,直接require已经通过npm安装的node-xlsx包。addEventListener
和fs.readdirSync(pathName)
出现在同一个文件中,感受次元壁击破的神奇。接下来就能简单了,用js画界面什么的,so easy。把bootstrap加上,连css都不用操心了。
- bootstrap要求有jquery,本地安装jquery以后,
window.jquery = window.$ = require('jquery')
必须要有。否则require的文件不存在于全局空间。
3.打包用electron-packager
这个npm包,一行代码就能打包出跨平台程序。
electron-packager AttendElectron attend --platform=win32 --overwrite
这里遇到一个问题,就是自己安装的npm包都没有被打包进来,这是package.json
中dependencies
写成了devDependencies
造成的。打包完,呈现在我面前的是一个300M的文件夹,orz,我的代码只有4k而已啊。压缩以后是90+M,自己内部用一用,就暂时到这里了。
遗留问题
1.打包
2.主进程操作,这里基本上都在操作渲染进程,没有用到主进程。打开文件那里还可以丰富下功能。3.npm基础不扎实,devDependencies
和dependencies
傻傻分不清楚
后续
助理表示压缩文件解压的时候报错,无解。于是打算把未压缩的文件夹拷给她,报错:路径名过长。orz,所以解压出错也是这个问题了。解决方法:把打包后的resource\app
打包为asar
1.npm install asar -g
2.asar pack app app.asar
3.移除app文件夹
助理又表示能不能生成个excel表,不要着色,格式简单。于是又加了生成excel表的功能。期间还有很多细枝末节的纠缠,需求不明确的活干起来真是orz啊。=, =
网友评论