node处理excel输出json

原理

通过node-xlsx或者js-xlsx将数据表处理成 data 多维数组输出后自行处理.

安装

1
npm i node-xlsx

新增文件夹,将 xlsx 文件放到excel文件夹下.
iShot2021-11-03 16.42.19.png

文件预览

iShot2021-11-03 16.45.35.png

创建执行文件 index.js

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
const fs = require("fs");
const xlsx = require("node-xlsx");

//几列数据,返回name是表单几,data是数组数据
const excelData = xlsx.parse("./excel/card.xlsx");

let arr = [];

// console.log(excelData)
//输出
// [
// {
// name: "Sheet1",
// data: [
// ["goods", "feifan", "jiujiu"],
// ["屈50", 43, 44],
// ["呷50", 36, 33],
// ["德30", 27, 32],
// ["奈30", 20, 31],
// ["本50", 43.5, 44.2],
// ["本50", 43.5, 44.2],
// ],
// }
// ];
//现在要做的就是把这个data,组合成想要的json格式,如下

// [
// {
// goods: '屈50',
// feifan: 43,
// jiujiu: 44
// },
// {
// goods: '呷50',
// feifan: 36,
// jiujiu: 33
// },
// {
// goods: '德30',
// feifan: 27,
// jiujiu: 32
// },
// ...
// ]

函数处理

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
let handleExcel = () => {
excelData.map((item) => {
let xlsData = item.data;
let keyArr = xlsData[0]; //key的数组
let dataArr = xlsData.slice(1); //data的数组,除去第一行

dataArr.map((lineItem) => {
let arrItem = {};
lineItem.map((i, index) =>
Object.assign(arrItem, { [keyArr[index]]: i })
); //再加一层[]是因为keyArr[index]是字符串
arr.push(arrItem);
});
});
};

//文件输出方法
let generatJSON = (fileName, data) => {
fs.writeFile(fileName, data, "UTF-8", (err) => {
if (err) {
console.log(err);
} else {
console.log("success");
}
});
};

handleExcel();
generatJSON("./data/data.json", JSON.stringify(arr, null, "\t"));

执行

1
node inde.js

查看 data 文件夹下的输出文件