node.js学习笔记(5)——excel-export模块导出excel表

一、excel-export模块

官方介绍:https://www.npmjs.com/package/excel-export

生成的表格为xlsx格式,支持多个sheet。本文只介绍一个sheet表的生成。

二、实例

1. 在package.json中引入excel-export模块,使用npm install 命令安装

2. 在js文件中写入var nodeExcel = require('excel-export'); 才可以使用该模块

3. 如果表格内容固定,在js文件中写入如下语句(来自官方文档,有删减)即可实现访问 localhost:port/Excel 时自动下载xlsx格式的表格

app.get('/Excel', function(req, res){
  	var conf ={};
    conf.name = "mysheet";
  	conf.cols = [{
		caption:'string',
        type:'string',
	},{
		caption:'date',
		type:'date',
	},{
		caption:'bool',
		type:'bool'
	},{
		caption:'number',
		 type:'number'				
  	}];
  	conf.rows = [
 		['pi', new Date(Date.UTC(2013, 4, 1)), true, 3.14],
 		["e", new Date(2012, 4, 1), false, 2.7182],
        ["M&M<>'", new Date(Date.UTC(2013, 6, 9)), false, 1.61803],
        ["null date", null, true, 1.414]  
  	];
  	var result = nodeExcel.execute(conf);
  	res.setHeader('Content-Type', 'application/vnd.openxmlformats');
  	res.setHeader("Content-Disposition", "attachment; filename=" + "Report.xlsx");
  	res.end(result, 'binary');
});

conf相当于单个sheet, conf.name为表名,conf.cols中存放了表头的内容,conf.rows中存放了主体内容。最后四行代码将定义的表写入response中,实现excel表的下载功能。

4. 使xlsx内容支持中文

注意res.setHeader这两行代码,Content-Type和Content-Disposition决定了访问该路由时获取的是要下载的内容。

在Content-Type中加入编码格式为utf-8即可实现文件内容支持中文

res.setHeader('Content-Type', 'application/vnd.openxmlformats;charset=utf-8');

5. 使xlsx标题支持中文

在 Content-Disposition 中有filename,定义了文件名。中文文件名可以通过编码转化写入到header中。

var name = encodeURI('测试表');
res.setHeader("Content-Disposition", "attachment; filename=" + name + ".xlsx");

(注:使用同样的方法命名sheet就失效了,如果有将sheet命名为中文的方法欢迎告知)

6. 表头写入变量内容

必须先将conf.cols声明为数组才能使用循环语句将数据写入表头。

conf.cols = [];
var test = ['序号', '学号', '姓名', '专业'];
for(var i=0; i<test.length; i++){
      var temp = {
        caption: test[i],
        type: 'string'
      };
      conf.cols.push(temp);
}

7. 表写入二维数组变量内容。

假设从数据库中取出内容为data,属性包括id, name, profession并写入到表中

var array = new Array();
for(var i=0; i<data.length; i++){
      var temp = new Array();
      temp[0] = i+1;
      temp[1] = data[i].id;
      temp[2] = data[i].name;
      temp[3] = data[i].profession;
      array.push(temp);
}
conf.rows = array;

 

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 12
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值