本文实例讲述了nodejs导出excel的方法。分享给大家供大家参考。具体如下:
nodejs 对查询数据生成excel并下载,采用方式先生成本excel文件,然后再下载;通过比较采用excel-export插件代码如下:
excel.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();
调用方式:
var excel=require('../lib/excelHelper.js'); exports.exportExcel=function(req,res){ var conf ={}; conf.cols = [ {caption:'string', type:'string'}, {caption:'date', type:'string'}, {caption:'bool', type:'bool'}, {caption:'number', type:'number'} ]; conf.rows = [ ['pi', '2015-06-29', true, 3.14], ["e", '2015-06-29', 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,req, res,true); } }); }
希望本文所述对大家的nodejs程序设计有所帮助。
华山资源网 Design By www.eoogi.com
广告合作:本站广告合作请联系QQ:858582 申请时备注:广告合作(否则不回)
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
华山资源网 Design By www.eoogi.com
暂无评论...
P70系列延期,华为新旗舰将在下月发布
3月20日消息,近期博主@数码闲聊站 透露,原定三月份发布的华为新旗舰P70系列延期发布,预计4月份上市。
而博主@定焦数码 爆料,华为的P70系列在定位上已经超过了Mate60,成为了重要的旗舰系列之一。它肩负着重返影像领域顶尖的使命。那么这次P70会带来哪些令人惊艳的创新呢?
根据目前爆料的消息来看,华为P70系列将推出三个版本,其中P70和P70 Pro采用了三角形的摄像头模组设计,而P70 Art则采用了与上一代P60 Art相似的不规则形状设计。这样的外观是否好看见仁见智,但辨识度绝对拉满。
更新日志
2024年11月21日
2024年11月21日
- 罗大佑-无法盗版的青春套装版10CD【WAV】
- 张学友《意乱情迷》蜚声环球 2024 [WAV+CUE][1G]
- 柏菲《好歌30年特别版2CD》最好听的影视歌曲[低速原抓WAV+CUE][1G]
- 张学友《世纪10星·永恒篇》香港版[WAV+CUE][1G]
- 模拟之声慢刻CD《刘德海.琵琶独奏精逊【低速原抓WAV+CUE】
- Jamettone-18052023—improv(EDit)(2024)【FLAC】
- 【索尼精芽20首最棒的苏格兰歌曲集【FLAC】
- 池约翰C.J《少年白马醉春风2 动画原声带》[320K/MP3][26.67MB]
- 池约翰C.J《少年白马醉春风2 动画原声带》[FLAC/分轨][144.13MB]
- 陈致逸《幻想乐园 Fantasyland》[320K/MP3][120.54MB]
- 席卷全球最红舞曲《火辣辣DJ[英文版]》[DTS-WAV]
- 群星-席卷全球最红舞曲《火辣辣DJ中文版》【WAV】
- 模拟之声慢刻CD《声入人心[年度发烧人声严选]》[低速原抓WAV+CUE]
- 陈致逸《幻想乐园 Fantasyland》[FLAC/分轨][554.27MB]
- Rhymist / LusciousBB《年轮》[320K/MP3][76.52MB]