首頁  >  文章  >  web前端  >  NodeJs怎麼實作下載Excel檔案功能?

NodeJs怎麼實作下載Excel檔案功能?

青灯夜游
青灯夜游轉載
2020-09-10 10:48:333346瀏覽

NodeJs怎麼實作下載Excel檔案功能?下面本篇文章就來跟大家介紹一下。有一定的參考價值,有需要的朋友可以參考一下,希望對大家有幫助。

NodeJs怎麼實作下載Excel檔案功能?

【影片教學推薦:node js教學 】

nodejs作為一門新的語言,報表功能也不是十分完善。

(1).js-xlsx : 目前Github 上star 數量最多的處理Excel 的函式庫,支援解析多種格式表格XLSX / XLSM / XLSB / XLS / CSV,解析採用純js實現,寫入需要依賴nodejs或FileSaver .js實現產生寫入Excel,可以產生子表Excel,功能強大,但上手難度稍大。不提供基礎設定Excel表格api例儲存格寬度,文件有些亂,不適合快速上手;

https://github.com/SheetJS/js-xlsx

(2). node-xlsx : 基於Node.js解析excel文件資料及產生excel文件,僅支援xlsx格式;

https://github.com/mgcrea/node-xlsx

#(3 ).excel-parser : 基於Node.js解析excel文件數據,支援xls及xlsx格式文件,需依賴python,太重不太實用;

https://github.com/leftshifters/excel- parser

(4).excel-export : 基於Node.js將資料產生匯出excel文件,產生文件格式為xlsx,可設定儲存格寬度,API容易上手,無法產生worksheet字表,比較單一,基本功能可以基本滿足;

https://github.com/functionscope/Node-Excel-Export

(5).node-xlrd : ​​基於node.js從excel檔案中提取數據,僅支援xls格式檔案,不支援xlsx,有點過時,常用的都是XLSX 格式。

nodejs剛出來那幾年開發人員寫了很多node依賴函式庫,但是大部分現在處於不維護狀態。

現在還在持續更新的只有node-xlsx excel-export建議使用,js-xlsx作為一個大而全的基礎庫(雖然現在也不在更行了,此庫最大的問題是api十分不友好,學習曲線高)有能力的項目組可以進一步封裝,。

本篇為一個簡單的下載的DEMO ,就簡單使用excel-export,

var express = require('express');var router = express.Router();var server =  express();

server.use('/api', router); 
var nodeExcel = require('excel-export');
 
const disableLayout ={layout: false};

 router.get('/test', function(req, res, next) {
     res.json({
         code:200
     })
 }) 
// disable interface layout.hbs  user config layout: falserouter.get('/exportExcel/:id', function(req, res, next) {    var conf ={};
    conf.stylesXmlFile = "styles.xml";
    conf.name = "mysheet";
    conf.cols = [{
        caption:'string',
        type:'string',
        beforeCellWrite:function(row, cellData){            return cellData.toUpperCase();
        },
        width:300
    },{
        caption:'date',
        type:'date',
        beforeCellWrite:function(){            var originDate = new Date(Date.UTC(1899,11,30));            return function(row, cellData, eOpt){
                console.log((cellData - originDate));                if (eOpt.rowNum%2){
                    eOpt.styleIndex = 1;
                }                else{
                    eOpt.styleIndex = 2;
                }                if (cellData === null){
                    eOpt.cellType = 'string';                    return 'N/A';
                } else
                    return (cellData - originDate) / (24 * 60 * 60 * 1000);
            }
        }()
    },{
        caption:'bool',
        type:'bool'
    },{
        caption:'number',
        type:'number'
    }];
    conf.rows = [
        ['pi', '2013-12-5', true, 3.14],
        ["e", new Date(2012, 4, 1), false, 2.7182],
        ["M&M<>'", new Date(Date.UTC(2013, 6, 9)), false, 1.61803],
        ["null date", null, true, 1.414]
    ];    var result = nodeExcel.execute(conf);
    res.setHeader('Content-Type', 'application/vnd.openxmlformats');
    res.setHeader("Content-Disposition", "attachment; filename=" + encodeURIComponent("导出列表")+".xlsx");
    res.end(result, 'binary');
});
 
router.get('/exportmultisheetExcel/:id', function(req, res, next) {    var confs = [];    var conf = {};
    conf.cols = [{
        caption: 'string',
        type: 'string'
    },
        {
            caption: 'date',
            type: 'date'
        },
        {
            caption: 'bool',
            type: 'bool'
        },
        {
            caption: 'number 2',
            type: 'number'
        }];
    conf.rows = [['hahai', (new Date(Date.UTC(2013, 4, 1))).oaDate(), true, 3.14], ["e", (new Date(2012, 4, 1)).oaDate(), false, 2.7182], ["M&M<>'", (new Date(Date.UTC(2013, 6, 9))).oaDate(), false, 1.2], ["null", null, null, null]];    for (var i = 0; i < 3; i++) {
        conf = JSON.parse(JSON.stringify(conf));   //clone
        conf.name = 'sheet'+i;
        confs.push(conf);
    }    var result = nodeExcel.execute(confs);
    res.setHeader('Content-Type', 'application/vnd.openxmlformats');
    res.setHeader("Content-Disposition", "attachment; filename=" + "Report.xlsx");
    res.end(result, 'binary');
});var server=server.listen(8080,function(){
    console.log('8080')
})

3.excel-export 提供了4種類型的資料格式,數字,時間,真假,預設字串

cols可以為設定列類型的caption為列名(會填入第一行的內容),type為列資料型別,beforeCellWrite可以在填入之前對資料進行邏輯處理,width可以定義寬頻

rows為二位數群組,直接按照行列方式填入excel的內容

name定義sheet的名字

值得注意的時候excel-export如果需要定義excel的預設格式,需要引用一個excel的格式頭,這個頭定義在styles.xml中,這個檔案可以在node_modules/example/styles.xml中拷貝的專案對應目錄

範例用的是根目錄,所以我們需放在根目錄,不然就會報找不到這個檔案。

實際開發中,有時候excel的檔案匯出時要用中文,這時候要設定下header和格式化中文即可

res.setHeader('Content-Type', ' application/vnd.openxmlformats;charset=utf-8');
res.setHeader("Content-Disposition", "attachment; filename=" encodeURIComponent("匯出清單") ".xlsx");

#更多程式相關知識,可存取:程式設計入門! !

以上是NodeJs怎麼實作下載Excel檔案功能?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:cnblogs.com。如有侵權,請聯絡admin@php.cn刪除