1、背景
在Nodejs應用程序中輸出Excel,第一印象想到的一般是node-xlsx,這類插件不僅需要我們通過JS寫入數據,還需要通過JS進行EXCEL顯示樣式的管理。
這是個大問題,不僅代碼冗余,而且非常不易於維護,假設業務需要合並一個單元格,或者換個顏色,我們都需要重新修改代碼。
反思這個問題的核心,跟使用JS來操作頁面樣式其實是同一個道理,我們沒有把數據/業務邏輯操作和樣式分離。
在WEB開發中,我們有了CSS來分離處理樣式的問題。
現在,在輸出EXCEL的時候,我們也希望將樣式問題分離出去。
2、ejsexcel
ejsexcel 就是在這樣的背景下誕生的。
1、業務人員提供EXCEL模板,包含顯示樣式以及固定文本。
2、數據部分由開發者按照ejs格式錄入。
3、Nodejs應用程序只需要准備好數據,然后通過ejsexcel注入到EXCEL模板中即可。
3、DEMO
1、Excel模板
可以輸出單個對象,也可以通過forRow關鍵字進行循環輸出。
另外,其中的腳本同樣支持JS相關函數。
2、注入數據
//讀取excel模板 let daily_excel_template = fs.readFileSync(DAILY_TEMPLATE) //用數據源(對象)data渲染Excel模板 let self = this ejsExcel.renderExcelCb(daily_excel_template, reportData, function(err,exlBuf2){ if(err) { logger.fatal('[EXCEL生成失敗!]:'+DAILY_TEMPLATE) logger.info(err) return; } fs.writeFileSync(filename, exlBuf2); logger.info('[EXCEL生成成功!]:'+DAILY_TEMPLATE) });
以上是部分代碼:
首先讀取模板EXCEL文件,然后調用ejsExcel.renderExcelCb方法將數據注入模板中,由模板生成最終的EXCEL文件。
4、注意的問題
- 作者手工編譯了Node-Expat,所以使用前確保你使用的node版本以及操作系統已經被正確編譯,如沒有需要自行編譯對應版本的node-expat二進制文件。點擊這里查看目前已經編譯的版本。
- 目前還不支持EXCEL條件格式。