美文网首页
基于Electron的excel读取操作

基于Electron的excel读取操作

作者: 小人阳 | 来源:发表于2016-10-24 16:33 被阅读0次

    今天老板大发慈悲,发布了一项新规则,正常打卡一次,总时间增加半个小时。同学们喜大普奔,要知道我们被要求一周在实验室打卡满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包。addEventListenerfs.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.jsondependencies写成了devDependencies造成的。打包完,呈现在我面前的是一个300M的文件夹,orz,我的代码只有4k而已啊。压缩以后是90+M,自己内部用一用,就暂时到这里了。

    遗留问题

    1.打包

    2.主进程操作,这里基本上都在操作渲染进程,没有用到主进程。打开文件那里还可以丰富下功能。3.npm基础不扎实,devDependenciesdependencies傻傻分不清楚

    后续

    助理表示压缩文件解压的时候报错,无解。于是打算把未压缩的文件夹拷给她,报错:路径名过长。orz,所以解压出错也是这个问题了。解决方法:把打包后的resource\app打包为asar

    1.npm install asar -g

    2.asar pack app app.asar3.移除app文件夹

    助理又表示能不能生成个excel表,不要着色,格式简单。于是又加了生成excel表的功能。期间还有很多细枝末节的纠缠,需求不明确的活干起来真是orz啊。=, =

    相关文章

      网友评论

          本文标题:基于Electron的excel读取操作

          本文链接:https://www.haomeiwen.com/subject/vquluttx.html