我已经在这一段时间了,似乎无法得到这个。我也是javascript的新手。我的目标是创建一个格式为
的数组(或新的javascript对象){
data:{
[A1:"first column first row", B1:"second column", C1:"third column",...etc],
[A2:"first column first row", B2:"second column", C2:"third column",...etc],
[A3:"first column first row", B3:"second column", C3:"third column",...etc],
[A4:"first column first row", B4:"second column", C4:"third column",...etc],
[A5:"first column first row", B5:"second column", C5:"third column",...etc]
}
}
可能与如何使用行和列格式化excel密切相关。我计划使用它来提供handsontable以便客户端操作此数据。
我目前拥有的是
var file = __dirname + '/../../clientFiles/exceltest.json';
fs.readFile(file, 'utf8', function (err, data) {
if (err) {
sails.log.error('ERROR: ' + err);
return;
}
data = JSON.parse(data);
var rows = Object.keys(data);
rows.forEach(function(column) {
var items = Object.keys(data[column]);
items.sort();
items.forEach(function(item) {
var value = data[column][item];
console.log(item+' = '+value);
});
});
});
键名永远不会少于2个字符,但可以像excel一样增大(例如A1 => AAA1)。
网页脚本
<div id="dataTable"></div>
<script>
$("#dataTable").handsontable({
data: <%= data %>,
startRows: 6,
startCols: 8,
rowHeaders: true,
colHeaders: true,
});
</script>
我被拉出的json格式为
{
"sheet1": {
"F15": "4,385.97",
"G15": "910.36",
"H15": "1,555.36",
"I15": "373.74",
"J15": "24.03%",
"K15": "58.53%",
"L15": "61",
"M15": "669",
"N15": "216665",
"B16": "01/14/2014",
"D16": "829",
"E16": "12,997.13",
"F16": "531.85",
"G16": "225.48",
"H16": "359.21",
"I16": "80.21",
"J16": "22.33%",
"K16": "62.77%",
"L16": "55",
"M16": "99",
"N16": "45384",
"B17": "01/14/2014",
"D17": "320",
"E17": "6,142.45",
"F17": "1,643.42",
"G17": "129.76",
"H17": "215.90",
"I17": "41.09",
"J17": "19.03%",
"K17": "60.10%",
"L17": "111",
"M17": "182",
"N17": "35485",
"D18": "13478",
"E18": "94,735.05",
"F18": "6,663.08",
"G18": "1,689.97",
"H18": "3,054.92",
"I18": "839.16",
"J18": "27.47%",
"K18": "55.32%",
"L18": "29",
"M18": "996",
"N18": "396396"
},
"sheet2": {
"F15": "4,385.97",
"G15": "910.36",
"H15": "1,555.36",
"I15": "373.74",
"J15": "24.03%",
"K15": "58.53%",
"L15": "61",
"M15": "669",
"N15": "216665",
"B16": "01/14/2014",
"D16": "829",
"E16": "12,997.13",
"F16": "531.85",
"G16": "225.48",
"H16": "359.21",
"I16": "80.21",
"J16": "22.33%",
"K16": "62.77%",
"L16": "55",
"M16": "99",
"N16": "45384",
"B17": "01/14/2014",
"D17": "320",
"E17": "6,142.45",
"F17": "1,643.42",
"G17": "129.76",
"H17": "215.90",
"I17": "41.09",
"J17": "19.03%",
"K17": "60.10%",
"L17": "111",
"M17": "182",
"N17": "35485",
"D18": "13478",
"E18": "94,735.05",
"F18": "6,663.08",
"G18": "1,689.97",
"H18": "3,054.92",
"I18": "839.16",
"J18": "27.47%",
"K18": "55.32%",
"L18": "29",
"M18": "996",
"N18": "396396"
}
}
我正在为我的框架和引擎使用sails和nodejs。我已经能够对键进行排序,但是对它们进行分组使我望而却步。如果需要,我可以使用下划线。
提前致谢。
答案 0 :(得分:1)
以下代码将适当地格式化您的JSON,但我不确定您是否希望将所有工作表合并为一个。
更新:使用您提供的格式,JSON将无法与handsontable一起使用。我已将我的解决方案更新为正确的格式,并包含handsontable的集成代码。
更新2 :包含的列定义,以便表格绘制正确。
的 Live Demo 强>
<强> JS 强>
var sheets = {
"sheet1": {
"F15": "4,385.97",
"G15": "910.36",
"H15": "1,555.36",
"I15": "373.74",
"J15": "24.03%",
"K15": "58.53%",
"L15": "61",
"M15": "669",
"N15": "216665",
"B16": "01/14/2014",
"D16": "829",
"E16": "12,997.13",
"F16": "531.85",
"G16": "225.48",
"H16": "359.21",
"I16": "80.21",
"J16": "22.33%",
"K16": "62.77%",
"L16": "55",
"M16": "99",
"N16": "45384",
"B17": "01/14/2014",
"D17": "320",
"E17": "6,142.45",
"F17": "1,643.42",
"G17": "129.76",
"H17": "215.90",
"I17": "41.09",
"J17": "19.03%",
"K17": "60.10%",
"L17": "111",
"M17": "182",
"N17": "35485",
"D18": "13478",
"E18": "94,735.05",
"F18": "6,663.08",
"G18": "1,689.97",
"H18": "3,054.92",
"I18": "839.16",
"J18": "27.47%",
"K18": "55.32%",
"L18": "29",
"M18": "996",
"N18": "396396"
},
"sheet2": {
"F15": "4,385.97",
"G15": "910.36",
"H15": "1,555.36",
"I15": "373.74",
"J15": "24.03%",
"K15": "58.53%",
"L15": "61",
"M15": "669",
"N15": "216665",
"B16": "01/14/2014",
"D16": "829",
"E16": "12,997.13",
"F16": "531.85",
"G16": "225.48",
"H16": "359.21",
"I16": "80.21",
"J16": "22.33%",
"K16": "62.77%",
"L16": "55",
"M16": "99",
"N16": "45384",
"B17": "01/14/2014",
"D17": "320",
"E17": "6,142.45",
"F17": "1,643.42",
"G17": "129.76",
"H17": "215.90",
"I17": "41.09",
"J17": "19.03%",
"K17": "60.10%",
"L17": "111",
"M17": "182",
"N17": "35485",
"D18": "13478",
"E18": "94,735.05",
"F18": "6,663.08",
"G18": "1,689.97",
"H18": "3,054.92",
"I18": "839.16",
"J18": "27.47%",
"K18": "55.32%",
"L18": "29",
"M18": "996",
"N18": "396396"
}
};
function processJSON(sheets){
var data = [];
for(var sheet in sheets){
var curSheet = sheets[sheet];
var rowData = {};
var curRowNum = -1;
var nextRowNum;
for(var cell in curSheet){
nextRowNum = parseInt(cell.replace( /^\D+/g, ''),10);
cellLetter = cell.replace(/[0-9]/g, '');
if(nextRowNum !== curRowNum){
debugger;
rowData = {};
data.push(rowData);
curRowNum = nextRowNum;
}
rowData[cellLetter] = curSheet[cell];
}
}
return data;
}
var data = processJSON(sheets);
console.log(data);
$('#example').handsontable({
data: data,
minSpareRows:0,
colHeaders: true,
contextMenu: true,
columns: [
{data: "A"},
{data: "B"},
{data: "C"},
{data: "D"},
{data: "E"},
{data: "F"},
{data: "G"},
{data: "H"},
{data: "I"},
{data: "J"},
{data: "K"},
{data: "L"},
{data: "M"},
{data: "N"},
{data: "O"},
{data: "P"},
{data: "Q"},
{data: "R"},
{data: "S"}
]
});
function bindDumpButton() {
$('body').on('click', 'button[name=dump]', function () {
var dump = $(this).data('dump');
var $container = $(dump);
console.log('data of ' + dump, $container.handsontable('getData'));
});
}
bindDumpButton();
<强>结果
[
{
"F": "4,385.97",
"G": "910.36",
"H": "1,555.36",
"I": "373.74",
"J": "24.03%",
"K": "58.53%",
"L": "61",
"M": "669",
"N": "216665"
},
{
"B": "01/14/2014",
"D": "829",
"E": "12,997.13",
"F": "531.85",
"G": "225.48",
"H": "359.21",
"I": "80.21",
"J": "22.33%",
"K": "62.77%",
"L": "55",
"M": "99",
"N": "45384"
},
{
"B": "01/14/2014",
"D": "320",
"E": "6,142.45",
"F": "1,643.42",
"G": "129.76",
"H": "215.90",
"I": "41.09",
"J": "19.03%",
"K": "60.10%",
"L": "111",
"M": "182",
"N": "35485"
},
{
"D": "13478",
"E": "94,735.05",
"F": "6,663.08",
"G": "1,689.97",
"H": "3,054.92",
"I": "839.16",
"J": "27.47%",
"K": "55.32%",
"L": "29",
"M": "996",
"N": "396396"
},
{
"F": "4,385.97",
"G": "910.36",
"H": "1,555.36",
"I": "373.74",
"J": "24.03%",
"K": "58.53%",
"L": "61",
"M": "669",
"N": "216665"
},
{
"B": "01/14/2014",
"D": "829",
"E": "12,997.13",
"F": "531.85",
"G": "225.48",
"H": "359.21",
"I": "80.21",
"J": "22.33%",
"K": "62.77%",
"L": "55",
"M": "99",
"N": "45384"
},
{
"B": "01/14/2014",
"D": "320",
"E": "6,142.45",
"F": "1,643.42",
"G": "129.76",
"H": "215.90",
"I": "41.09",
"J": "19.03%",
"K": "60.10%",
"L": "111",
"M": "182",
"N": "35485"
},
{
"D": "13478",
"E": "94,735.05",
"F": "6,663.08",
"G": "1,689.97",
"H": "3,054.92",
"I": "839.16",
"J": "27.47%",
"K": "55.32%",
"L": "29",
"M": "996",
"N": "396396"
}
]