站長資訊網
最全最豐富的資訊網站

NodeJs怎么實現下載Excel文件功能?

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");

贊(0)
分享到: 更多 (0)
網站地圖   滬ICP備18035694號-2    滬公網安備31011702889846號
精品国产一区二区三区不卡 | 国产成人精品免费视频大全麻豆| 中文字幕免费视频精品一| 麻豆国产96在线日韩麻豆| 国产精品四虎在线观看免费| 精品久久久无码人妻中文字幕豆芽| 亚洲午夜精品一区二区公牛电影院| 人妻精品久久久久中文字幕一冢本| 免费精品99久久国产综合精品| 99久久婷婷免费国产综合精品| 精品国偷自产在线视频| 国产成人精品一区二区三区| 免费精品国自产拍在线播放 | 久久精品国产亚洲av成人| 日本精品VIDEOSSE×少妇| 久久久久一级精品亚洲国产成人综合AV区 | 亚洲精品无码你懂的| 精品久久久噜噜噜久久久| 精品无码无人网站免费视频| 久久久无码精品亚洲日韩蜜臀浪潮 | 日韩精品无码一本二本三本| 亚洲AV无码成人精品区蜜桃| 日本精品卡一卡2卡3卡四卡| 久久精品成人国产午夜| 国产精品网站在线观看免费传媒| 国产精品无码无需播放器| 国产丝袜在线精品丝袜| 91精品国产自产在线观看永久| 国产精品手机在线观看你懂的| 国产精品丝袜久久久久久不卡| 国产精品青草久久久久福利99 | 久久久久久久久久国产精品免费| 亚洲爆乳精品无码一区二区三区| 久久精品视频免费播放| 无码aⅴ精品一区二区三区浪潮| 无码人妻精品一区二区三区夜夜嗨 | 国产成人精品一区二区三区免费| 亚洲国产精品无码成人片久久| 久久精品亚洲一区二区| 99热这里只有精品免费播放| 亚洲精品视频久久|