NodeJs实现下载Excel文件
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: false router.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';} elsereturn (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)); //cloneconf.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");
?
轉載于:https://www.cnblogs.com/yiyi17/p/8466089.html
總結
以上是生活随笔為你收集整理的NodeJs实现下载Excel文件的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 浅谈新一代PGIS技术在智慧消防中的创新
- 下一篇: visio业务流程图教学_用visio软