Obteniendo el mismo objeto al analizar la hoja de cálculo en un arreglo.
Estoy tratando de crear mi propia hoja de trabajo en un arreglo de objetos en Node con exceljs. Básicamente, quiero convertir las filas en objetos, siendo los valores de la primera fila la clave y los valores de la fila actual el valor. Recibo un objeto con las claves correctas, pero siempre los mismos valores (es decir, los valores de la última fila).
¿Qué estoy haciendo mal? ¿Es el asincrónico? También ignora el elemento vacío, sé que es un índice incorrecto.
Código:
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
Hoja de trabajo de ejemplo:
imagen
Salida:
[
<1 elemento vacío>,
{
'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'
}
]
davy.ai
El problema con el código es que se está utilizando el mismo objeto
row
para todas las filas en lugar de crear un nuevo objeto para cada fila. Esto hace que los valores se sobrescriban y resulta en que todos los objetos tengan los mismos valores que la última fila.Para solucionar esto, mueve la declaración
var row = {}
dentro del primer bucle for para que se cree un nuevo objeto para cada fila. Esto asegurará que cada objeto tenga sus propios valores distintos.Aquí está el código actualizado:
Esto creará un nuevo objeto
row
para cada fila y lo agregará al arrayrows
. El array resultante de objetos tendrá los pares clave-valor correctos para cada fila.