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.

Excepción: Rango no encontrado. Intentando ubicar múltiples columnas utilizando una celda activa. (sin embargo funciona al ingresarlos manualmente)

Estoy tratando de insertar valores en celdas. Aquí está mi código:

var values = [
              ["test1", "test2", "test3"]
             ];

var ss = SpreadsheetApp.getActiveSpreadsheet()
// var sheet = ss.getSheets()[0]
var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet()

var cellsToWriteTo = []
function testFunction() {
  var activeCell = sheet.getActiveCell();
  var firstRow = activeCell.getRow()
  var firstColumn = activeCell.getColumn()

cellsToWriteTo = `["R${firstRow}C${firstColumn}:R${firstRow}C${firstColumn + 2}"]`
  console.log(cellsToWriteTo)

var range = sheet.getRange(cellsToWriteTo)
  range.setValues(values);
}

Esto me da el siguiente error:

Exception: Rango no encontrado

Sin embargo, si copio y pego cellsToWriteTo desde el registro de la consola y lo coloco en getRange.. funciona perfectamente cada vez.

Cosas que he intentado hasta ahora:

Pensé que tenía algo que ver con no obtener la hoja de cálculo correctamente (getActiveSpreadsheet().getActiveSheet()).

Arreglé cómo estaban organizados mis valores (en matrices dentro de matrices).

Busqué en Google el mensaje de error y revisé cómo obtenerRange/configurarRango correctamente en la documentación y en tutoriales. Aparentemente, no puedes establecer celdas arbitrarias si las estás llamando desde la hoja de cálculo en sí. Esta es mi sospecha de lo que está saliendo mal aquí. Sin embargo, ¿cómo puede ser esto si cuando ingreso una simple cadena funciona bien? Aquí simplemente estoy haciendo interpolación de cadenas.

Sé que esto es algo básico, cualquier ayuda sería apreciada.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Parece que el problema radica en la forma en que se define y se pasa cellsToWriteTo a getRange. En lugar de establecer cellsToWriteTo como una cadena dentro de corchetes cuadrados, debería definirse como un arreglo con dos arreglos, así:

    cellsToWriteTo = [[primerFila, primerColumna, 1, 3]];

    Luego, al pasarlo a getRange, debería ser pasado sin los corchetes cuadrados y con las funciones getRow() y getColumn() reemplazadas por los índices reales de fila y columna, así:

    var rango = hoja.getRange(cellsToWriteTo[0][0], cellsToWriteTo[0][1], cellsToWriteTo[0][2], cellsToWriteTo[0][3]);

    Por lo tanto, el código corregido sería:

    var valores = [
                  ["test1", "test2", "test3"]
                 ];
    
    var ss = SpreadsheetApp.getActiveSpreadsheet()
    // var hoja = ss.getSheets()[0]
    var hoja = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet()
    
    var cellsToWriteTo = []
    function testFunction() {
      var celdaActiva = hoja.getActiveCell();
      var primerFila = celdaActiva.getRow()
      var primerColumna = celdaActiva.getColumn()
    
      cellsToWriteTo = [[primerFila, primerColumna, 1, 3]];
      console.log(cellsToWriteTo)
    
      var rango = hoja.getRange(cellsToWriteTo[0][0], cellsToWriteTo[0][1], cellsToWriteTo[0][2], cellsToWriteTo[0][3]);
      rango.setValues(valores);
    }
    

    Con estos cambios, el código debería poder insertar los valores en las celdas especificadas.

Comments are closed.