nodejs导出excel的方法

本文实例讲述了nodejs导出excel的方法分享给大家供大家参考。具体如下:

nodejs 对查询数据生成excel并下载,采用方式先生成本excel文件,然后再下载;通过比较采用excel-export插件代码如下:

excel.js代码

rush:js;"> 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.stat(filePath,function(error,state) { if(error) throw error; config.fileSize = state.size; var range = self.req.headers.range; config.startPos = self._calStartPosition(range); self.config = config; self._configHeader(config); down(); }); } /** * 下载文件 * @param filePath 文件路径 * @param req * @param res * @param isDeleted 下载完成后是否删除文件,true删除 */ excel.prototype.download = function(filePath,req,res,isDeleted) { var self = this; self.req=req; self.resp = res; path.exists(filePath,function(exist) { if(exist) { self._init(filePath,function() { var config = self.config resp = self.resp; fReadStream = fs.createReadStream(filePath,{ encoding : 'binary',bufferSize : 1024 * 1024,start : config.startPos,end : config.fileSize }); fReadStream.on('data',function(chunk) { resp.write(chunk,'binary'); }); fReadStream.on('end',function() { //是否删除文件 if(isDeleted) { fs.unlink(filePath,function (err,res) { }); } resp.end(); }); }); } else { console.log('文件不存在!'); return; } }); } module.exports=new excel();

调用方式:

rush:js;"> var excel=require('../lib/excelHelper.js'); exports.exportExcel=function(req,res){ var conf ={}; conf.cols = [ {caption:'string',type:'string'},{caption:'date',{caption:'bool',type:'bool'},{caption:'number',type:'number'} ]; conf.rows = [ ['pi','2015-06-29',true,3.14],["e",false,2.7182] ]; var filename ="导出excel.xlsx"; res.setHeader('Content-disposition','attachment; filename='+encodeURIComponent(filename)); excel.createExcel({ data:conf,savePath:"uploadFile/excel/",cb:function(path){ excel.download(path,true); } }); }

希望本文所述对大家的nodejs程序设计有所帮助。

相关文章

这篇文章主要介绍“基于nodejs的ssh2怎么实现自动化部署”的...
本文小编为大家详细介绍“nodejs怎么实现目录不存在自动创建...
这篇“如何把nodejs数据传到前端”文章的知识点大部分人都不...
本文小编为大家详细介绍“nodejs如何实现定时删除文件”,内...
这篇文章主要讲解了“nodejs安装模块卡住不动怎么解决”,文...
今天小编给大家分享一下如何检测nodejs有没有安装成功的相关...