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数据为如下:
git

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!