nodejs導(dǎo)出excel的方法
本文實(shí)例講述了nodejs導(dǎo)出excel的方法。分享給大家供大家參考。具體如下:
nodejs 對(duì)查詢數(shù)據(jù)生成excel并下載,采用方式先生成本excel文件,然后再下載;通過(guò)比較采用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); }); } /** * 計(jì)算上次的斷點(diǎn)信息 * @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開(kāi)始下載的,否則則表示是斷點(diǎn)下載的。 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();
調(diào)用方式:
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 ="導(dǎo)出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); } }); }
希望本文所述對(duì)大家的nodejs程序設(shè)計(jì)有所幫助。
- nodejs簡(jiǎn)單讀寫(xiě)excel內(nèi)容的方法示例
- Node.js利用js-xlsx處理Excel文件的方法詳解
- Node.js實(shí)現(xiàn)Excel轉(zhuǎn)JSON
- Nodejs獲取網(wǎng)絡(luò)數(shù)據(jù)并生成Excel表格
- 詳解使用Node.js 將txt文件轉(zhuǎn)為Excel文件
- node.js讀取Excel數(shù)據(jù)(下載圖片)的方法示例
- nodejs使用node-xlsx生成excel的方法示例
- nodejs讀取并去重excel文件
- Node解決簡(jiǎn)單重復(fù)問(wèn)題系列之Excel內(nèi)容的獲取
- Nodejs技巧之Exceljs表格操作用法示例
- node讀寫(xiě)Excel操作實(shí)例分析
相關(guān)文章
Node.js中http模塊和導(dǎo)出共享問(wèn)題
這篇文章主要介紹了Node.js中http模塊和導(dǎo)出共享,通過(guò)?http?模塊提供的?http.createServer()?方法,就能方便的把一臺(tái)普通的電腦,變成一臺(tái)?web?服務(wù)器,從而對(duì)外提供?web?資源服務(wù),本文給大家詳細(xì)講解,需要的朋友可以參考下2022-10-10node.js中路由,中間件,get請(qǐng)求和post請(qǐng)求的參數(shù)詳解
本文給大家匯總介紹了node.js中的路由,中間件,get請(qǐng)求和post請(qǐng)求的參數(shù)的使用方法,非常的詳細(xì),有需要的小伙伴可以參考下2017-12-12Express下采用bcryptjs進(jìn)行密碼加密的方法
本篇文章主要介紹了Express下采用bcryptjs進(jìn)行密碼加密的方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-02-02用npm install時(shí)報(bào)錯(cuò)node-sass npm ERR command
在用npm install時(shí)報(bào)錯(cuò)npm ERR! path D:…\node-sass和npm ERR! command failed 問(wèn)題,本文給大家介紹了如何解決這個(gè)問(wèn)題,文中通過(guò)圖文給大家介紹的非常詳細(xì),需要的朋友可以參考下2024-03-03Node.js實(shí)現(xiàn)鏈?zhǔn)交卣{(diào)
這篇文章介紹了Node.js實(shí)現(xiàn)鏈?zhǔn)交卣{(diào)的方法,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-07-07