今天老板大發(fā)慈悲,發(fā)布了一項新規(guī)則,正常打卡一次,總時間增加半個小時。同學(xué)們喜大普奔,要知道我們被要求一周在實驗室打卡滿70個小時,要求是指定的時間段,不是早上8點到晚上8點就算12個小時。
助理姐姐心塞了,原以為用了釘釘就不需要她手工算時長了,結(jié)果釘釘還是趕不上老板的需求變化之快啊。為了不讓這項規(guī)則作廢,程序員義不容辭的決定用代碼拯救大家。
已知條件
釘釘可以生成考勤報表(xls格式),其中包括打卡總時長,每次打卡的情況(正常、無、遲到xxx分鐘、早退xxx分鐘)
解析xlsx文件,計算出數(shù)據(jù)后,修改原文件
node-xlsx
這個包可以讀寫xlsx文件,按照行列讀取為二維數(shù)組,考勤報表的格式是相對固定的。讀取報表,生成姓名-總打卡時長、正常打卡次數(shù)的對象,計算出姓名-最終打卡時長
讀取、修改、寫入后,原文件的著色,單元格合并效果會消失,所以光用node
處理文件還不夠,得有界面展示數(shù)據(jù)
electron
又能方便的繪制界面,又能讀取文件,還不用搭服務(wù)器,作為前端,當然要用Electron。慕名已久,正好用這個項目練練手。在github上根據(jù)文檔hello world了以后,就開始動手。
讀取文件
1.得到考勤報表文件位置原計劃提供“打開文件”按鈕和拖拽文件按鈕兩個方式,但是打開文件的方法略麻煩,果斷選擇了官網(wǎng)上現(xiàn)有的拖拽文件打開的方法。
2.解析xlsx文件在這一步體會到了Electron的神奇之處。在上一步中,交互行為的描述和在瀏覽器中基本完全一樣,但是又不會有fakePath的情況發(fā)生。在這一步,直接require已經(jīng)通過npm安裝的node-xlsx包。addEventListener
和fs.readdirSync(pathName)
出現(xiàn)在同一個文件中,感受次元壁擊破的神奇。接下來就能簡單了,用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
造成的。打包完,呈現(xiàn)在我面前的是一個300M的文件夾,orz,我的代碼只有4k而已啊。壓縮以后是90+M,自己內(nèi)部用一用,就暫時到這里了。
遺留問題
1.打包
2.主進程操作,這里基本上都在操作渲染進程,沒有用到主進程。打開文件那里還可以豐富下功能。3.npm基礎(chǔ)不扎實,devDependencies
和dependencies
傻傻分不清楚
后續(xù)
助理表示壓縮文件解壓的時候報錯,無解。于是打算把未壓縮的文件夾拷給她,報錯:路徑名過長。orz,所以解壓出錯也是這個問題了。解決方法:把打包后的resource\app
打包為asar
1.npm install asar -g
2.asar pack app app.asar
3.移除app文件夾
助理又表示能不能生成個excel表,不要著色,格式簡單。于是又加了生成excel表的功能。期間還有很多細枝末節(jié)的糾纏,需求不明確的活干起來真是orz啊。=, =