前言:框架中一般使用# SheetJS比较多,处理一些复杂数据更为精准有效,但对不喜欢翻文档的小伙伴们来说,阅读起来有些困难,里面定义的一些方法名也是有点晦涩
一、json格式直接转表格
用于页面上,利用创建一个a标签,自点击下载,这种适用于页面量较小的数据,数据过大,还是用插件解决较好
const list =[
{
ID:0,
name:'小明'
},
{
ID:1,
name:'小红'
},
{
ID:2,
name:'小白'
},
{
ID:3,
name:'小黑'
}
]
jsonToExcel(list, "ID,作者姓名")
function jsonToExcel(data, head, name = '导出的文件名') {
let str = head ? head + '\n' : '';
data.forEach(item => {
// 拼接json数据, 增加 \t 为了不让表格显示科学计数法或者其他格式
for(let key in item) {
str = `${str + item[key] + '\t'},`
}
str += '\n'
});
console.log(str)
// encodeURIComponent解决中文乱码
const uri = 'data:text/csv;charset=utf-8,\ufeff' + encodeURIComponent(str);
// 通过创建a标签实现
const link = document.createElement("a");
link.href = uri;
// 对下载的文件命名
link.download = `${name + '.csv'}`;
link.click();
}
二、利用node-xlsx插件
这种略微简单粗暴,弊端是不能一起生成表头,需要后期加上
const list =[
{
name:'sheet',
data:[['0','小明'],['1','小红']]
}
]
const buffer = xlsx.build(list);
fs.writeFile("testFile.xlsx", buffer, function (err) {
if (err) {
console.log(err, "保存excel出错");
} else {
console.log("写入excel成功!!!");
}
});
小demo
const axios = require("axios").default;
const fs = require('fs')
const xlsx = require("node-xlsx");
var offset = 1;
var list1 = [];
function request() {
axios({
url: "https:xxx",
data: {
"offset": offset,
"size": 20,
},
method: "POST"
})
.then((res) => {
const listArr = res.data.data.list;
if (listArr.length > 0) {
offset++;
list1.push(listArr)
request();
} else {
const list = [{
name: 'sheet',
data: list1.flat().map(item => Object.values(item))
}]
request2(list);
}
})
}
request()
function request2(list) {
const buffer = xlsx.build(list);
fs.writeFile("test.xlsx", buffer,);
}