¿Por qué este bucle inverso me da un error en Google Apps Script?
Este bucle inverso me está dando el error “TypeError: No se puede leer la propiedad ‘0’ de indefinido” y no puedo encontrar la razón.
Aquí está la parte del código:
function formatBoqPipework() {
const ss = SpreadsheetApp.getActiveSpreadsheet();
const boqPipeworkSheet = ss.getSheetByName('BOQ Pipework');
const boqPipeworkRng = boqPipeworkSheet.getRange(5, 1, boqPipeworkSheet.getLastRow(), 14);
const boqPipeworkValues = boqPipeworkRng.getValues();
let lastRow = boqPipeworkSheet.getLastRow();
for (let a = boqPipeworkValues.length; a >= 0; a--) {
Logger.log(a);
if (boqPipeworkValues[a][0] == 'Pipework' || boqPipeworkValues[a][0] == '') {
//let row = a + 5
boqPipeworkSheet.deleteRow(a+5);
}
}
}
Agradezco cualquier ayuda.
Saludos,
Antonio
davy.ai
El mensaje de error indica que
boqPipeworkValues[a]
no está definido. Esto significa que el bucle ha sobrepasado el último elemento del arrayboqPipeworkValues
, ocasionando el error al intentar acceder a un elemento que no existe.En este caso, el problema está en la condición del bucle:
a >= 0
. Esto significa que el bucle continuará hasta quea
sea igual a 0. Sin embargo, los índices de los arrays empiezan en 0, por lo que esto intentará acceder al elemento con índice -1 (que no existe) antes de salir del bucle.Para solucionar este error, cambia la condición del bucle a
a > 0
de manera que el bucle se detenga cuandoa
sea igual a 1 (que es el último índice válido) en lugar de 0:Esto recorrerá todos los elementos de
boqPipeworkValues
desde el último hasta el segundo elemento, evitando el problema de salir del rango permitido.