Want to make creations as awesome as this one?

Transcript

Master Checkboxes

onOpen()

toggleMasterCheckboxes()

onEdit(e)

Un Apps Script que conmuta de manera agrupada las casillas de verificación de una hoja de cálculo de Google.

Pablo Felip (@pfelipm)Licencia MIT

Esta función construye el menú del script al abrir la hoja la hoja de cálculo. En el estado de partida, la función de casillas de verificación maestras está inhibida 🟠, por lo que inicialmente se despliega el comando para que el usuario pueda activarla. CÓDIGO:

  • Se emplea el trigger simple onOpen() , que se ejecutará cada vez que un usuario con permisos de edición abra la hoja de cálculo. Puedes aprender alguna cosa más sobre los triggers (activadores) en general o sobre este en particular en este artículo.
  • Se utiliza el servicio Properties Service para leer la propiedad masterCheckboxes, que representa el estado de activación del script. Esto se hace por usuario, mediante getUserProperties(), de manera que el script puede estar activado para algunos editores del documento y permanecer "dormido" para otros. La propiedad masterCheckboxes podrá adoptar los valores off u on.
  • Se utiliza el operador JavaScript de coalescencia nula (??) para que en el caso de que esta propiedad no haya sido aún establecida, la variable masterSwitch adopte el valor por defecto off, que indica que el script no debe conmutar las casillas de verificación de manera agrupada.
  • Dependiendo de dicho estado se genera el (único) comando de menú apropiado para que el usuario pueda actuar sobre el comportamiento del script. En todos los casos, este comando invocará a la función toggleMasterCheckboxes().

Esta función es invocada desde el menú del script. Conmuta el valor de la propiedad que determina su estado de activación y modifica la apariencia del menú para que refleje los cambios de manera apropiada, haciendo aparecer el comando necesario para cambiar el estado de activación del script en cada momento. CÓDIGO:

  • Se lee el valor de la propiedad del usuario denominada masterCheckboxes, usando de nuevo el operador JavaScript de coalescencia nula para controlar su posible estado no inicializado.
  • Se conmuta y escribe el estado de la propiedad y se invoca a la función onOpen() para que reconstruya el menú del script de acuerdo con el nuevo estado de la propiedad masterCheckboxes.

Master Checkboxes

Un Apps Script que conmuta de manera agrupada las casillas de verificación de una hoja de cálculo de Google.

Volver

onEdit(e)

Determinar cuántas ☑️ contiguas hay justo debajo de la editada

Cambiar el estado de todaslas ☑️ detectadas

¿El script está activado?

¿Solo se ha editado 1 celda?

¿Ninguna ☑️ justo encima?

1

2

4

5

6

3

¿Es una ☑️?

Pablo Felip (@pfelipm)Licencia MIT

La función onEdit(e), que no es más que otro trigger simple, se va a ejecutar cada vez que un usuario cambie manualmente el valor de una celda. Aquí es donde se encuentra toda la lógica que ajustará el valor (o no) de otras casillas de verificación distintas de la que ha sido modificada de manera directa. Esta función se estructura en seis secciones diferenciadas que se ocupan de distintas tareas:

  1. Comprobar que el script esté activado.
  2. Verificar que se ha modificado una única celda.
  3. Determinar que la celda que se ha editado contiene una casilla de verificación.
  4. Determinar que la casilla de verificación no tiene ninguna otra justo encima.
  5. Localizar todas las casillas de verificación contiguas que se encuentran justo debajo de ella.
  6. Finalmente, aplicar el estado de la casilla de verificación que ha sido editada a todas las que se han encontrado justo por debajo.
CÓDIGO: 👀 En el resto de bloques del diagrama de esta página se analiza cada sección por separado.

CÓDIGO: El objeto e que recibe el trigger simple onEdit(e) contiene, entre otras cosas, información relativa al intervalo de celdas (el rango de la hoja de cálculo, en definitiva) que ha sido modificado por el usuario. El script lo usará más adelante para realizar determinadas comprobaciones. Por el momento, tan solo se verifica que el script esté activado, comparando la propiedad de usuario masterCheckboxes con el valor on.

CÓDIGO: Se analiza el objeto e.range, recibido por la función, para comprobar que el intervalo de datos que se ha modificado contenga solo 1 celda (1 fila, 1 columna).

CÓDIGO: Si justo encima de la casilla de verificación que se ha modificado existe otra no puede tratarse entonces de una casilla "maestra", dado que esta deben encontrarse en la celda situada en el extremo superior de un rango-columna de casillas de verificación contiguas. Se toman de nuevo precauciones a la hora de determinar si la celda superior contiene una casilla de verificación. A esta celda se accede aplicando el método offset() sobre el rango que se ha editado para situarse una fila hacia arriba (-1, 0).

CÓDIGO: Aquí se aprovecha el método getDataRegion(dimension) para expandir verticalmente el rango correspondiente a la casilla de verificación que se ha modificado. Como, no obstante, solo estamos interesados en las celdas que quedan por debajo de ella, la búsqueda de posibles casillas de verificación contiguas solo se realizará de manera descendente, en la hoja de cálculo, a partir de su posición.

CÓDIGO: Finalmente, si realmente hay casillas de verificación cuyos valores deben actualizarse, se muestra un mensaje emergente por medio del método toast() y se procede a escribir su valor. Fíjate en que es posible utilizar el método setValue() sobre un intervalo de celdas dado que se está escribiendo el mismo valor en todas ellas, el correspondiente al estado actual de la casilla de verificación que se ha modificado. Este valor es tomado de la propiedad e.value que recibe onEdit().

CÓDIGO:

CÓDIGO: Para determinar si la celda que se ha modificado contiene una casilla de verificación se obtiene su regla de validación a través del método geDataValidation() y se comprueba que esta sea del tipo DataValidationCriteria.CHECKBOX. ⚠️ ¡Cuidado! Este método puede devolver un valor nulo (null) en el caso de que no se hubiera aplicado ninguna regla de validación sobre la celda. Por esa razón, se comprueba que dataValidation no sea nulo (null es interpretado como falso en un contexto booleano) antes de tratar de consultar los criterios de validación de la celda usando el método getCriteriaType().