Problema de Google Script / Spreadsheet, aquí.

Estoy tratando de copiar datos de una celda y ponerlos en la primera celda vacía en la columna E. Cuando realizo lo siguiente, obtengo 'Rango no encontrado' en la línea 15:

function operationsLag() {
  var report = SpreadsheetApp.getActiveSheet();
  var reportValues = report.getDataRange().getValues();
  var lastRow = getFirstEmptyRow('E');
var income = "Income";

for (var i = 0; i < reportValues.length; i++) {
    var row = reportValues[i];
    if (row[0] == income) {
      report.getRange(lastRow).setValue(row[1]);
}
}
}

  function getFirstEmptyRow(columnLetter) {
  var rangeA1 = columnLetter + ':' + columnLetter;
  var report = SpreadsheetApp.getActiveSheet();
  var column = report.getRange(rangeA1);
  var values = column.getValues();
  var ct = 0;
  while ( values[ct][0] != "" ) {
    ct++;
  }
  return (ct+1);
}

Intenté reemplazar report.getRange(lastRow).setValue(row[1]); con algo como report.getRange('E5').setValue(row[1]); y funciona bien, por lo que debe haber algo mal con mi función de búsqueda de celda / fila vacía.

¿Alguien puede ayudar en absoluto?

1
Christopher Birks 20 ene. 2021 a las 17:50

1 respuesta

La mejor respuesta

Problema:

La función getRange (a1Notation) con un argumento acepta una { {X0}} y esa es la notación de celda de referencia, p. Ej. E5 y es por eso que getRange('E5') funciona correctamente.

Por otro lado, lastRow no es un a1Notation sino un solo número integer. La secuencia de comandos no puede encontrar a qué celda se refiere desde algo así getRange(2) porque puede ser cualquier columna (si se supone que 2 es un número de fila).

Solución:

Puede usar literales de plantilla para construir la a1Notation basado en lastRow.

Reemplazar:

report.getRange(lastRow).setValue(row[1]);

Con:

report.getRange(`E${lastRow}`).setValue(row[1]);

o utilice getRange (fila , columna) versión donde 5 es la columna E (la columna 5th).

report.getRange(lastRow,5).setValue(row[1]);
1
Mario 20 ene. 2021 a las 14:58