为了账号安全,请及时绑定邮箱和手机立即绑定

为 Excel 中的每行数据返回 JSON 对象

为 Excel 中的每行数据返回 JSON 对象

子衿沉夜 2023-09-21 10:49:36
我正在为 SheetJS 使用 webpack。我对 webpack 比较陌生,而且对 SheetJS 完全是新手。我不想返回Excel 数据的一个JSON 对象,而是想为Excel 中的每一行数据返回一个 JSON 对象。输入 Excel 布局示例:Col1     Col2      Col3A2       B2        C2A3       B3        C3此示例中的理想输出是 2 个 JSON 对象:JSON 1:{    "A2": [        {           "Col1": "A2"           "Col2": "B2"           "Col3": "C2"        }    ]}JSON 2: {       "A3": [        {           "Col1": "A3"           "Col2": "B3"           "Col3": "C3"        }    ] }尝试的解决方案:var to_json_linebyline = function to_json_linebyline(wb){    var sheet = wb.Sheets['Sheet1'];    var result = {};    var row, rowNum, colNum;    var range = XLSX.utils.decode_range(sheet['!ref']);    for(rowNum = range.s.r; rowNum <= range.e.r-2; rowNum++){    row = [];       for(colNum=range.s.c; colNum<=range.e.c; colNum++){          var nextCell = sheet[          XLSX.utils.encode_cell({r: rowNum, c: colNum})       ];       if( typeof nextCell === 'undefined' ){          row.push(void 0);       } else row.push(nextCell.w);       }       result[nextCell.v] = row;    }    return JSON.stringify(result, 2, 2);}当前结果:{  "Col3": [    "Col1",    "Col2",    "Col3"  ],  "C2": [    "A2",    "B2",    "C2"  ],  "C3": [    "A3",    "B3",    "C3"  ]}任何朝着正确方向发展的事情都会很棒。如果它有帮助,这里是github 存储库..谢谢!
查看完整描述

1 回答

?
慕慕森

TA贡献1856条经验 获得超17个赞

你的意图是正确的,代码是错误的。您正在定义数据并将其推送到数组中,而不是创建 JSON 对象。尝试这个。


var to_json_linebyline = function to_json_linebyline(wb){

    var sheet = wb.Sheets['Sheet1'];

    var results = [];

    var range = XLSX.utils.decode_range(sheet['!ref']);

    for(let rowNum = (range.s.r+1); rowNum <= range.e.r; rowNum++){

       let thisRow = {},

           thisNode = '';

       

       for(let colNum=range.s.c; colNum<=range.e.c; colNum++){

          var thisHeader = sheet[XLSX.utils.encode_cell({r: 0, c: colNum})].w

          var thisCell = sheet[XLSX.utils.encode_cell({r: rowNum, c: colNum})].w

          if(colNum === 0){ 

            thisNode = thisCell;

          }

          thisRow[thisHeader] = thisCell;

       }

       thisResult = {};

       thisResult[thisNode] = [thisRow]

       results.push(thisResult)

    }

    return JSON.stringify(results);

}


查看完整回答
反对 回复 2023-09-21
  • 1 回答
  • 0 关注
  • 106 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信