node将excel转换为json
nodeJs将excel转化为json
1.直接转换
var xlsx = require("node-xlsx");
var fs = require('fs');
var list = xlsx.parse("myexcel.xlsx");
//console.log(JSON.stringify(list));
console.log(list);
writeFile("myexcel.json", JSON.stringify(list));
function writeFile(fileName, data) {
fs.writeFile(fileName, data, 'utf-8', complete);
function complete(err) {
if (!err) {
console.log("文件生成成功");
}
}
}
这种基础的转换会生成这样一个数组:
[
{
"name": "Sheet1",
"data": [
["id", "name", "sex", "age"],
[1, "nali", "male", 25],
[2, "naliomg", "female", 22]
]
},
{ "name": "Sheet2", "data": [] },
{ "name": "Sheet3", "data": [] }
]
其中,每一个大对象为一个sheet中的内容,name为sheet命名,data为表格里每一行的数据。
2.对数据进行一些对象化处理
以上直接转换的方式主要转换成了数组内容,不太方便读取与使用,将excel定义好后做一些基本处理就好用得多。
excel数据为如下:
var xlsx = require("node-xlsx");
var fs = require('fs');
var list = xlsx.parse("Camp.xlsx");
praseExcel(list);
//解析Excel
function praseExcel(list)
{
// sheet循环
for (var i = 0; i < list.length; i++)
{
var excleData = list[i].data; // body数据
var sheetArray = []; // sheet存储
var typeArray = excleData[1]; // 数据类型
var keyArray = excleData[2]; // 关键字或者属性名
// 开始循环数据内容
for (var j = 3; j < excleData.length ; j++)
{
var curData = excleData[j];
if(curData.length == 0) continue;
var item = changeObj(curData,typeArray,keyArray);
sheetArray.push(item);
}
if(sheetArray.length >0)
writeFile(list[i].name+".json",JSON.stringify(sheetArray));
}
console.log("qqq");
}
//转换数据类型,用对象保存起来
function changeObj(curData,typeArray,keyArray)
{
var obj = {};
for (var i = 0; i < curData.length; i++)
{
//字母
obj[keyArray[i]] = changeValue(curData[i],typeArray[i]);
}
return obj;
}
function changeValue(value,type)
{
if(value == null || value =="null") return "";
if(type =="int") return Math.floor(value);
if(type =="Number") return value;
if(type =="String") return value;
}
//写文件
function writeFile(fileName,data)
{
fs.writeFile(fileName,data,'utf-8',complete);
function complete(err)
{
if(!err)
{
console.log("文件生成成功");
}
}
}
这样就将excel转换为有属性的对象了。
THE END!