nodejs导出excel的方法

 更新时间:2015年06月30日 11:07:03   作者:liuyuhua  
这篇文章主要介绍了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.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程序设计有所帮助。

相关文章

  • Node.js中http模块和导出共享问题

    Node.js中http模块和导出共享问题

    这篇文章主要介绍了Node.js中http模块和导出共享,通过 http 模块提供的 http.createServer() 方法,就能方便的把一台普通的电脑,变成一台 web 服务器,从而对外提供 web 资源服务,本文给大家详细讲解,需要的朋友可以参考下
    2022-10-10
  • node.js中路由,中间件,get请求和post请求的参数详解

    node.js中路由,中间件,get请求和post请求的参数详解

    本文给大家汇总介绍了node.js中的路由,中间件,get请求和post请求的参数的使用方法,非常的详细,有需要的小伙伴可以参考下
    2017-12-12
  • 浅析node.js中close事件

    浅析node.js中close事件

    本文简单介绍了http.ServerRespose对象的close事件,并给出了相关实例,推荐给需要的小伙伴参考下吧。
    2014-11-11
  • Express下采用bcryptjs进行密码加密的方法

    Express下采用bcryptjs进行密码加密的方法

    本篇文章主要介绍了Express下采用bcryptjs进行密码加密的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-02-02
  • Node中解决接口跨域问题详解

    Node中解决接口跨域问题详解

    在 Node 中编写接口时,我们常常会遇到跨域问题,通过本篇文章,我们来聊聊如何解决 Node 中接口的跨域问题,文中代码示例介绍了非常详细,需要的朋友可以借鉴一下
    2023-04-04
  • Yarn的安装与使用详细介绍

    Yarn的安装与使用详细介绍

    不知道大家有没有觉察到Facebook近年大招频出。Yarn是Facebook最近发布的一款依赖包安装工具。Yarn是一个新的快速安全可信赖的可以替代NPM的依赖管理工具,Yarn正式发布没几天已经迅速达到了数万赞,就可以知道大家苦NPM久已。这篇文章将详细介绍Yarn的安装与使用。
    2016-10-10
  • 用npm install时报错node-sass npm ERR command failed问题的解决方法

    用npm install时报错node-sass npm ERR command

    在用npm install时报错npm ERR! path D:…\node-sass和npm ERR! command failed 问题,本文给大家介绍了如何解决这个问题,文中通过图文给大家介绍的非常详细,需要的朋友可以参考下
    2024-03-03
  • Node.js实现链式回调

    Node.js实现链式回调

    这篇文章介绍了Node.js实现链式回调的方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-07-07
  • Node.js 使用命令行工具检查更新

    Node.js 使用命令行工具检查更新

    这篇文章主要介绍了Node.js 使用命令行工具检查更新的方法,使用Node.js开发命令行工具是开发者应该掌握的一项技能,适当编写命令行工具以提高开发效率,有需要的小伙伴可以参考下
    2017-06-06
  • node.js实现的装饰者模式示例

    node.js实现的装饰者模式示例

    这篇文章主要介绍了node.js实现的装饰者模式,简单说明了装饰者模式的原理、功能并结合实例形式给出了node.js装饰者模式的实现方法,需要的朋友可以参考下
    2017-09-09

最新评论