nodejs+exceljs模块实现页面下载excel文件(代码教程)
程序员文章站
2022-05-23 18:14:06
我的node版本是v6.10.0
最近用nodejs作为后台搭建了一个简单的管理系统,有个需求是需要采集数据生成excel通过浏览器下载。
从网上查了很多例子,由于nodej...
我的node版本是v6.10.0
最近用nodejs作为后台搭建了一个简单的管理系统,有个需求是需要采集数据生成excel通过浏览器下载。
从网上查了很多例子,由于nodejs发展的比较快,版本变更频繁,相关的资料不太好找,最后我用exceljs+nodejs本身实现了这个功能,放在这里记录一下。
整体实现分两步
一、前台点击按钮生成excel
前台代码
// 导出excel按钮按下处理 form.on('submit(export)', function(data){ $.post("exportSgxxExcel",{data:JSON.stringify(data.field)},function(result) { // 取得文件地址 console.log(result.path); // $.get("download", {path:result.path}, function(){ // console.log('text'); // }); location.href ="download?path="+result.path; }); return false; //阻止表单跳转。如果需要表单跳转,去掉这段即可。 });
后台代码
// 导出XX信息excel exports.exportSgxxExcel = function(req, res){ // 检索XX信息数据 var sql = "SELECT XX from XX where XX=XX"; // 取得数据 connection.query(sql, function(err, rows, fields){ if(err){ // 系统异常 console.log(err); res.json({'status':'error'}); }else{ //console.log("取得数据为"+JSON.stringify(rows)); // 生成一个文件 var workbook = new Excel.Workbook(); // 添加一个sheet var sheet = workbook.addWorksheet('XX信息'); // 设置sheet页的表头 sheet.columns = [ { header: 'AA', key: 'bb', width: 10 }, { header: 'CC', key: 'dd', width: 10 }, ]; // 设置行数据 //console.log(JSON.stringify(rows)); sheet.addRows(rows); // 取得当前时间 var date = Moment().format('YYYYMMDD_HHmmss'); var path = downloadPath+date+"_XX信息.xlsx"; workbook.xlsx.writeFile(path) .then(function() { res.json({'path':path}); }); } }); };
这一步会在服务器本地你设置的downloadPath下生成一个excel文件,并且把文件的真实路径返回到post的回调中
二、下载文件
前台代码其实就在上一步的代码中,就一句
location.href ="download?path="+result.path;
后台代码也很简单
// 下载文件 exports.download = function(req, res){ // 取得前台传过来的文件path var path = req.query.path; console.log('准备下载------'+path); // 取得文件名 var filename = path.substring(path.lastIndexOf('/')+1); // 下载处理 res.download(path, filename); };
nodejs的express模块自带下载,直接按照上面的写法就能下载了
注意以下几点,downloadPath最好用相对路径,这种下载的实现好像只能用get请求,post没实验成功。
exceljs使用方式直接参考github上的说明就行,看api还是很强大的,能实现很多操作,不过我这就用了很简单的一部分。
上一篇: JQuery与JS里submit()的区别示例介绍
下一篇: 元注解和使用实例