在Node.js中使用ejsexcel輸出EXCEL檔案

大魔王薩格拉斯發表於2016-11-16

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

 

相關文章