es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿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

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    El mensaje de error indica que boqPipeworkValues[a] no está definido. Esto significa que el bucle ha sobrepasado el último elemento del array boqPipeworkValues, 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 que a 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 cuando a sea igual a 1 (que es el último índice válido) en lugar de 0:

    for (let a = boqPipeworkValues.length - 1; a > 0; a--) {
    

    Esto recorrerá todos los elementos de boqPipeworkValues desde el último hasta el segundo elemento, evitando el problema de salir del rango permitido.

Comments are closed.