将工作表解析为数组时获取相同的对象
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;
}
我正在尝试使用 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;
}