miércoles, 27 de febrero de 2019

Referencias a pestañas y/o celdas en código

No es inusual que en el código metamos líneas tal como esta: 

var herramienta = SpreadsheetApp.getActiveSpreadsheet()
var pestana = herramienta.getSheetByName('guardias')
var dato = pestana.getRange('A3').getValue()

 Estas dos líneas funcionarán solamente mientrás no se cambie el nombre de la pestaña y/o mientrás no se meta ninguna fila o columna antes de la fila 3 o de la columna A.

Pero en cuanto un usuario cambie el nombre de la pestaña... el código dejará de funcionar.
Y,  metiendo una fila nueva antes de la 3, el código dará otro valor.

Ante este problema, tenemos la solución:
En vez de utilizar getSheetByName
crearemos un intervalo con nombre llamado "Educa_profesor" en la pestaña que queremos referenciar y en el código utilizaremos esta línea para conseguir la pestaña
herramienta. getRangeByName('Educa_profesor').getSheet()
Con esto logramos que no nos afecte el cambio de nombre de pestaña.

En el caso de pestana.getRange('A3').getValue() podemos utilizar el mismo proceso, es decir, crear un intervalo con nombre que apunte a A3 y en el código:

herramienta. getRangeByName('rangoA3').getValue()


========================================================

========================================================

En mi caso tengo un problema añadido ya que utilizo fórmulas dentro del código tal que así:

  pestana.getRange('I11').setValue('=sort(unique('guardias'!A:A))') 

Si cambiasen el nombre de la pestaña guardias o metiesen una columna nueva antes de A, la fórmula escrita daría error al no encontrar dicho nombre de pestaña.

Para evitarlo la solución es un poco más larga.
Nos apoyaríamos también en un intervalo con nombre que cogiese toda la fila A de la pestaña guardias y escribiríamos esta línea de código:

  var mi_columna = "'"+herramienta.getRangeByName('columnaAA').getSheet().getName()+"'!"+herramienta.getRangeByName('columnaAA').getA1Notation()
Y la línea de escribir la fórmula quedaría así:

  pestana.getRange('I11').setValue('=sort(unique('+mi_columna+'))')

No hay comentarios:

Publicar un comentario

Crear PDF horizontal

El código que vamos a mostrar aquí no ha sido creado por nosotros, sino que lo hemos encontrado en Internet. Objetivo: Publicar una pesta...