欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Node导出excel小窍门

程序员文章站 2022-05-30 15:04:11
...

这边介绍两种方式

下载在项目中

通过浏览器下载(重点)

在项目中

第一步: 引入

const fs = require("fs");

const path = require("path");

const nodeExcel = require('excel-export');

let conf = {};
var fileName = “xxxx”+ ".xlsx";
conf.name = “xxx”;//表格名 
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);