json.excel
Version:
json to excel,or excel to json
122 lines (107 loc) • 2.37 kB
JavaScript
/*
*
*/
var FIELDS={
WORKSHEETS:'worksheets',
NAME:'name',
DATA:'data',
VALUE:'value',
FORMATCODE:'formatCode'
};
function kv(keys,data){
var i=0;
var len=keys.length;
var json={};
for(;i<len;i++){
(function(k,d){
var v=d[FIELDS.VALUE];
v=v === undefined ? '' : v;
json[k[FIELDS.VALUE]]=v;
})(keys[i],data[i]||{});
}
return json;
};
function vk(data,type){
var json=[];
//get key
if(type === 'key'){
for(var k in data){
var j={};
j[FIELDS.VALUE]=k;
json.push(j);
}
return json;
}
//get value
for(var k in data){
var j={};
j[FIELDS.VALUE]=data[k];
json.push(j);
}
return json;
};
//
function excel2json(data){
var keys=data.splice(0,1);
var json=[];
var i=0;
var len=data.length;
for(;i<len;i++){
(function(d){
json.push(kv(keys[0],d));
})(data[i]);
}
return json;
};
//
function json2excel(data){
var json=[];
var keys=data.slice(0,1);
var i=0;
var len=data.length;
json.push(vk(keys[0],'key'));
//return console.log(json);
for(;i<len;i++){
(function(d){
json.push(vk(d));
})(data[i]);
}
return json;
};
//excel to json
exports.excel2json=function(jsonstring){
var json={};
var worksheets=jsonstring[FIELDS.WORKSHEETS]||[];
var len=worksheets.length;
if(!len){
return {};
}
var i=0;
for(;i<len;i++){
var worksheet=worksheets[i];
var name=worksheet[FIELDS.NAME];
var data=worksheet[FIELDS.DATA];
if(data.length < 2){
//sheet data more than 2
continue;
}
json[name]=excel2json(data);
}
return json;
};
//json to excel
exports.json2excel=function(jsonstring){
var json={};
json[FIELDS.WORKSHEETS]=[];
for(var sheet in jsonstring){
var data=jsonstring[sheet]||[];
if(data.length < 2){
continue;
}
var j={};
j[FIELDS.NAME]=sheet;
j[FIELDS.DATA]=[].concat(json2excel(data));
json[FIELDS.WORKSHEETS].push(j);
}
return json;
};