将工作表解析为数组时获取相同的对象

Getting same object when parsing worksheet to array

我正在尝试使用 exceljs 将自己的工作表制作成节点中的对象数组。基本上我想将行转换为对象,第一行的值是键,实际行的值是值。我用正确的键取回了一个对象,但始终具有相同的值(即最后一行的值)。

我做错了什么?是异步的吗?也忽略空项,我知道它的索引不好。

代码:

import Excel from 'exceljs'

const parseWorkbookToObj = async (filename, worksheetNumber) => {

    var row = {}
    var rows = []

    const workbook = new Excel.Workbook();
    await workbook.xlsx.readFile(filename);
    
    const worksheet = workbook.getWorksheet(worksheetNumber);

    for (var i = 1; i <= worksheet.rowCount; i++){
        for(var j = 2; j <= worksheet.columnCount; j++){
            var header = await worksheet.getRow(1).values[j]
            var value = await worksheet.getRow(i).values[j];
            row[header] = value;
        }

        rows[i] = row;
    }

    return rows;
    
}

export default parseWorkbookToObj

示例工作表: image

输出:

[
  <1 empty item>,
  {
    'Header 2': 'Value 9',
    'Header 3': 'Value 10',
    'Header 4': 'Value 11'
  },
  {
    'Header 2': 'Value 9',
    'Header 3': 'Value 10',
    'Header 4': 'Value 11'
  },
  {
    'Header 2': 'Value 9',
    'Header 3': 'Value 10',
    'Header 4': 'Value 11'
  },
  {
    'Header 2': 'Value 9',
    'Header 3': 'Value 10',
    'Header 4': 'Value 11'
  }
]

在循环内声明行变量。

    for (var i = 1; i <= worksheet.rowCount; i++){
        let row = {}
        for(var j = 1; j <= worksheet.columnCount; j++){
             var header = await worksheet.getRow(1).values[j]
            var value = await worksheet.getRow(i).values[j];
            row[header] = value;
        }

        rows[i] = row;
    }