本文实例讲述了nodejs导出excel的方法。分享给大家供大家参考。具体如下:
nodejs 对查询数据生成excel并下载,采用方式先生成本excel文件,然后再下载;通过比较采用excel-export插件代码如下:
excel.js代码:
?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 var extend = require("extend"); var fs = require("fs"); var excelExport = require('excel-export'); var guid=require('guid'); var path=require('path'); var excel=function(){ this.req=null; this.resp=null; }; /** * 生成excel文件 * @param params */ excel.prototype.createExcel=function(params){ var setting={savePath:"uploadFile/excel/"}; setting=extend({},setting,params); var uuid=guid.create(); var data=params.data||""; var result = excelExport.execute(data); var name='excel'+uuid+'.xlsx'; var filePath= path.resolve(setting.savePath, name); fs.writeFile(filePath, result, 'binary',function(err){ setting.cb(filePath); }); } /** * 计算上次的断点信息 * @param range * @returns {number} * @private */ excel.prototype._calStartPosition = function(range) { var startPos = 0; if( typeof range != 'undefined') { var startPosMatch = /^bytes=([0-9]+)-$/.exec(range); startPos = Number(startPosMatch[1]); } return startPos; } excel.prototype._configHeader = function(config) { var startPos = config.startPos, fileSize = config.fileSize, resp = this.resp; // 如果startPos为0,表示文件从0开始下载的,否则则表示是断点下载的。 if(startPos == 0) { resp.setHeader('Accept-Range', 'bytes'); } else { resp.setHeader('Content-Range', 'bytes ' + startPos + '-' + (fileSize - 1) + '/' + fileSize); } resp.writeHead(206, 'Partial Content', { 'Content-Type' : 'application/octet-stream' }); } excel.prototype._init = function(filePath, down) { var config = {}; var self = this; fs.新闻热点
疑难解答