大多数项目中,我们都会遇到需要实现文件下载的需求,比如财务汇总,数据报表等等,这里我就给大家介绍下,如何通过node-xlsx 实现EXCEL文件下载。
npm install node-xlsx --save-dev //生成EXCEL npm install moment --save-dev //格式化时间
废话少说,直接撸代码:
示例梳理:首先,从数据库拉取要导出的数据,清理以前的导出数据(保持磁盘干净),然后整理数据生成EXCEL工作表并创建文件名和存放路径,最终写入EXCEL文件。
excelExport: async (ctx, next) => { //拉取数据库数据 var rows = await mysql.query("select * from t_article order by id desc"); //每次生成EXCEL文件的时候删除以前生成的文件 var folder_exists = fs.existsSync('./public/upload/excel'); if(folder_exists == true) { var dirList = fs.readdirSync('./public/upload/excel'); dirList.forEach(function(fileName) { fs.unlinkSync('./public/upload/excel/' + fileName); }); } var data = [['文章分类', '标题','关键字','描述', '标记', '文章内容', '来源', '作者']]; for(let item of rows){ data.push([item.category_name, item.title, item.keyword, item.description, item.tag, item.content, item.source, item.author]); } var buffer = xlsx.build([{name: "smycms-article", data: data}]);//生成EXCEL工作表 var fileName = 'all_article_'+ moment(new Date).format("YYYYMMDDHHmmss") +'.xlsx';//创建文件名 var filePath = './public/upload/excel/'+fileName; fs.writeFileSync(filePath, buffer, 'binary');//写入EXCEL文件 ctx.body = { msg: "导出成功", filename: fileName, }; },
前端下载:
我这里返回的文件名,直接通过 window.open("文件夹路径+文件名") 或 location.href = "文件夹路径+文件名 " ,就可以直接下载