当前位置: 代码迷 >> 综合 >> Node导出excel小窍门
  详细解决方案

Node导出excel小窍门

热度:36   发布时间:2024-02-01 23:10:56.0

这边介绍两种方式

下载在项目中

通过浏览器下载(重点)

在项目中

第一步: 引入

const fs = require("fs");

const path = require("path");

let conf = {};
var fileName = name + " " + Year + "-" + Month + "-" + Day + " " + Hours + "-" + Min + "-" + Seconds + ".xlsx";
conf.name = identifier;//表格名 
var alldata = []; 
alldata.push("数据库查询的值"); 
//决定列名和类型
conf.cols = [{caption: 'Id',type: 'string',width: 20}, {caption: '累计流量(m?)',type: 'string',width: 20}];
conf.rows = alldata;//填充数据
var result = nodeExcel.execute(conf);  //数据格式转换第一种基本上没什么问题 也没什么需要注意的事项
fs.access(path.join(__dirname, fileName), err => {if (err) {//文件不存在//将buffer文件生成excel表格//生成表格fs.writeFile(path.join(__dirname, fileName), result, 'binary', function (err) {if (err) {console.log('写入错误');}resolve(result)})} else {//文件存在,删除文件fs.unlink(path.join(__dirname, fileName), err => {//生成表格fs.writeFile(path.join(__dirname, fileName), result, 'binary', function (err) {if (err) {console.log('写入错误');}resolve(result)})})}})

第二种浏览器下载  

注意点1 文件名称如果带中文一定要转码

注意点2 重中之重 只能用get请求 用ajax访问不管你是get 或者 post请求 调试你会怀疑人生没有任何的报错 

let res =new Buffer(result,'binary'); 
ctx.response.set('Content-Type', 'application/octet-stream');
name = urlencode(station[0].station_name + " " + station[0].identifier + " " + Year + "-" + Month + "-" + Day + '.xlsx', "utf-8");
ctx.response.set("Content-Disposition", "attachment; filename* = UTF-8''"+ name);
ctx.body = res;

前端访问

var url = '';

window.location.replace(url);

 

 

  相关解决方案