nodejs匯出excel的方法,nodejs匯出excel
本文執行個體講述了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.configresp = 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程式設計有所協助。