javaScript实现 树形JSON格式数据 导出 Excel表格
- 实现效果,将多级JSON树形结构导出为Excel表格,效果如下:
2.新建一个 jsonToExcel.js,安装 xlsx 库,得到如下目录结构
//安装xlsx
yarn add xlsx
3.实现导出为Excel表格,代码有注释并有打印运行得到的数据格式,代码如下:
// javaScript实现 树形JSON格式数据 导出 Excel表格
// 引入
let XLSX = require("xlsx");
// 普通JSON 格式数据
let data = [
{ id: "100000", code: "100000", type: "1", value: "粮食生产", parentId: "0" },
{
id: "100600",
code: "100600",
type: "2",
value: "其他粮食生产",
parentId: "100000",
},
{
id: "fdc16bc5f83b4a94aa97d4681510b74e",
code: "100601",
type: "3",
value: "其他粮食生产其他产品",
parentId: "100600",
},
{
id: "120000",
code: "120000",
type: "1",
value: "畜牧业生产",
parentId: "0",
},
{
id: "120400",
code: "120400",
type: "2",
value: "水产养殖",
parentId: "120000",
},
{
id: "120404",
code: "120404",
type: "3",
value: "爬行类(龟、鳖)",
parentId: "120400",
},
{
id: "12040401",
code: "12040401",
type: "4",
value: "小爬行类其他",
parentId: "120404",
},
];
// 普通JSON 数据 根据parentId 转 树形结构 数据
function arrayToTree(arr, parentId) {
return arr.reduce((res, item) => {
if (item["parentId"] == parentId) {
item.children = arrayToTree(arr, item["code"]);
return res.concat({ ...item, name: item.value, id: item.code });
}
return res;
}, []);
}
// 得到树形数据
let treeData = arrayToTree(data, "0");
// console.log(JSON.stringify(treeData));
// [
// {
// id: "100000",
// code: "100000",
// type: "1",
// value: "粮食生产",
// parentId: "0",
// children: [
// {
// id: "100600",
// code: "100600",
// type: "2",
// value: "其他粮食生产",
// parentId: "100000",
// children: [
// {
// id: "100601",
// code: "100601",
// type: "3",
// value: "其他粮食生产其他产品",
// parentId: "100600",
// children: [],
// name: "其他粮食生产其他产品",
// },
// ],
// name: "其他粮食生产",
// },
// ],
// name: "粮食生产",
// },
// {
// id: "120000",
// code: "120000",
// type: "1",
// value: " 畜牧业生产",
// parentId: "0",
// children: [
// {
// id: "120400",
// code: "120400",
// type: "2",
// value: "水产养殖",
// parentId: "120000",
// children: [
// {
// id: "120404",
// code: "120404",
// type: "3",
// value: "爬行类(龟、鳖)",
// parentId: "120400",
// children: [
// {
// id: "12040401",
// code: "12040401",
// type: "4",
// value: "小爬行类其他",
// parentId: "120404",
// },
// ],
// name: "爬行类(龟、鳖)",
// },
// ],
// name: "水产养殖",
// },
// ],
// name: "畜牧业生产",
// },
// ];
//树形结构数据 转为每一行的数据(二维数组)
function parseTreeToRow(list, data = [], row = []) {
if (Array.isArray(list)) {
list.forEach((node) => {
if (node.type == 1) {
row = [{ value: node.value }];
}
if (!node.children || node.children.length == 0) {
data.push(row);
} else {
node.children.forEach((nodeChild) => {
parseTreeToRow(node.children, data, [
...row,
{ value: nodeChild.value },
]);
});
}
});
}
return data;
}
let rowData = parseTreeToRow(treeData);
// console.log(JSON.stringify(rowData));
// [
// [
// { value: "粮食生产" },
// { value: "其他粮食生产" },
// { value: "其他粮食生产其他产品" },
// ],
// [
// { value: "畜牧业生产" },
// { value: "水产养殖" },
// { value: "爬 行类(龟、鳖)" },
// { value: "小爬行类其他" },
// ],
// ];
// 行数据(二维数组)数据转为普通 一维数组格式
function toArray(data) {
let res = data.map((item) => {
let child = {};
item.forEach((childItem, index) => {
child[index + 1 + "级分类"] = childItem.value;
});
return child;
});
return res;
}
let arr = toArray(rowData);
// console.log(JSON.stringify(arr));
// // 最后JSON 数据格式数据
// [
// {
// "1级分类": "粮食生产",
// "2级分类": "其他粮食生产",
// "3级分类": "其他粮食生产其他产品",
// },
// {
// "1级分类": "畜牧业生产",
// "2级分类": "水产养殖",
// "3级分类": "爬行类(龟、鳖)",
// "4级分类": "小爬行类其他",
// },
// ];
// // 创建工作簿
const workbook = XLSX.utils.book_new();
//得到行数据(二维数组)数据转为普通 一维数组格式后 创建工作表
const worksheet = XLSX.utils.json_to_sheet(arr);
// 将工作表添加到工作簿中
XLSX.utils.book_append_sheet(workbook, worksheet, "Sheet1");
// 导出 Excel 文件 即可在当前目录得到 data.xlsx
XLSX.writeFile(workbook, "data.xlsx");
- 最后,使用node,执行 jsonToExcel.js 即可在当前目录得到data.xlsx 文件
node ./jsonToExcel.js