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條件格式。