2014-02-21 4 views
0

저는 잠시 동안이 상황을 겪어 왔으며 이것을 얻지 못했습니다. 나는 또한 비교적 새로운 자바 스크립트입니다. 내 목표는 밀접하게 행과 열 서식이 엑셀 방법과 관련이있을 수있는 형식열쇠로 json 문자열을 그룹화하고 배열에 추가하십시오.

{ 
    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] 
    } 
} 

이있는 배열 (또는 새로운 자바 스크립트 객체)를 생성하는 것입니다. 이것을 사용하여이 데이터의 클라이언트 쪽 조작을 위해 handsontable을 제공 할 계획입니다. 내가 현재 가지고있는

는 엑셀처럼 (예를 들어, A1 => AAA1)

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 자하지 않습니다,하지만 크기가 증가 할 수있다.

웹 페이지 스크립트는

<div id="dataTable"></div> 
<script> 
$("#dataTable").handsontable({ 
    data: <%= data %>, 
    startRows: 6, 
    startCols: 8, 
    rowHeaders: true, 
    colHeaders: true, 
}); 
</script> 

내가 pullng하고있는 JSON 내가 내 프레임 워크와 엔진의 돛과 nodejs를 사용하고

{ 
"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" 
    } 
} 

같은 형식이다. 나는 열쇠를 분류 할 수 있었지만 그들을 그룹화하면 나를 벗어날 수있다. 필요한 경우 언더 스코어를 사용할 수 있습니다.

미리 감사드립니다.

+2

당신은 많은 의미, Y가되지 않습니다 상단에 표시되는 데이터 구조 해시와 같은 배열을 정의한 다음 배열을 포함하는 해시를 정의합니다. – htatche

+1

@htatche가 맞습니다. 보여주는 구조가 유효한 JSON이 아닙니다. 또한 어떤 종류의 그룹을 찾고 있는지 분명하지 않습니다. 맨 아래에 붙여 넣은 JSON 데이터는 각 행과 열이 같은 시트로 나누어 지지만 맨 위에 지정한 구조에는 행당 하나의 배열이 있습니다. – sgress454

+0

확인하려면 : 데이터를 그룹화하려는 경우 각 행은 단일 배열로 표시되고 해당 배열의 값은 해당 행의 각 열의 값을 나타냅니다. 그래서, 당신은 같은 배열에 모든 "A *"키, 다른 배열에있는 모든 "B *"키 등을 넣으려고합니다. – Kyle

답변

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" 
    } 
] 
+0

감사합니다! 나는 당신이 아침에 올렸던 것을 더 깊이 볼 것입니다. – Karnith

+0

이것은 정말로 잘됩니다. 도로 블록에서 저를 다시 보내 주셔서 감사합니다. 귀하의 질문에 대한 응답으로, 나는 시트를 분리하여 보관하고 핸디 언 티브 (sheet1 a1과 시트 2 a1은 문제를 일으키지 않음)의 페이지 매김에 대한 이름을 사용하기를 희망했지만, 더 자세히 살펴본 결과 핸즈 저는 그런 것을 아직 지원합니다. – Karnith

+0

내가 할 수있는 일은 시트 이름을 가져오고 값을 시트 이름으로 밀어 루프를 변경하여 각 "시트"에 대한 배열로 만든 다음 시트 배열을 기본 배열로 푸시합니다. 그러면 시트가 나옵니다 : {시트 키}가 작동합니다. 이것은 중복 된 필드 ([sheet1, a1] 및 [sheet2, a1])가 다른 창에서 렌더링되기 때문에 서로 충돌하지 않는다는 점을 제외하고는 위의 json에서 시작한 것과 비슷합니다. 도움에 다시 한번 감사드립니다. – Karnith

관련 문제