Hoy vamos a aprender cómo crear un desplegable con opciones múltiples que se actualiza automáticamente. Vamos a ver cómo podemos seleccionar múltiples opciones para un solo libro y cómo el script manejará esas selecciones sin duplicados.
Video
Paso 1: Configurar Google Sheets
Crear la Hoja de Opciones
- Abre un nuevo archivo de Google Sheets (
sheets.new). - Renombra la primera hoja a «opciones».
- Ingresa tus categorías (en nuestro caso, géneros literarios) en la columna A, comenzando desde la celda A2.
| Género |
|---|
| Novela |
| Poesía |
| Cuento |
| Realismo Mágico |
| Fantasía |
| Ciencia Ficción |
Crear la Hoja de Datos
- Crea una nueva hoja y renómbrala a «datos».
- En la columna A, ingresa el encabezado «Libro».
- En la columna B, ingresa el encabezado «Género».
Vamos a suponer que quieres ingresar el libro «Cien Años de Soledad».
| Libro | Género |
|---|---|
| Cien Años de Soledad |
Crear el Desplegable
- Selecciona la celda B2 y ve a
Datos > Validación de datos. - En «Criterios», selecciona «Lista a partir de un rango».
- Selecciona el rango de géneros de la hoja «opciones» (por ejemplo,
opciones!A2:A). - Aplica la validación de datos para todas las celdas en la columna B (desde B2 hasta B).
Paso 2: Configurar el Script
Abrir el Editor de Scripts
- Ve a
Extensiones > Apps Script. - Crea un nuevo proyecto y añade el siguiente código:
function onEdit(e) {
const hoja = e.source.getActiveSheet();
const nombreHoja = hoja.getName();
const rango = e.range;
const columna = rango.getColumn();
const fila = rango.getRow();
const valorNuevo = e.value;
const valorAntiguo = e.oldValue;
// Configuración
const nombreHojaDesplegable = 'datos';
const columnaDesplegable = 2;
const filaInicio = 2;
if (nombreHoja === nombreHojaDesplegable && columna === columnaDesplegable && fila >= filaInicio) {
if (!valorAntiguo) {
// Si no hay valor antiguo, no hacer nada
return;
}
if (!valorNuevo) {
// Si el valor nuevo es nulo, borrar el contenido
rango.clearContent();
return;
}
const valoresExistentes = valorAntiguo.split(', ');
if (valoresExistentes.indexOf(valorNuevo) === -1) {
// Si el valor nuevo no está en los valores existentes, agregarlo
rango.setValue(valorAntiguo + ', ' + valorNuevo);
} else {
// Si el valor nuevo ya está en los valores existentes, mantener los valores antiguos
rango.setValue(valorAntiguo);
}
}
}
Explicación del Código
onEdit(e): Esta función se ejecuta cada vez que se edita una celda.- Se verifica que la edición se realice en la hoja «datos», en la columna de géneros (columna B) y a partir de la fila 2.
- Si la celda editada no tenía un valor anterior (
!valorAntiguo), no se hace nada. - Si el nuevo valor es nulo (
!valorNuevo), se borra el contenido de la celda. - Si el valor nuevo no está en la lista de valores existentes (
valoresExistentes.indexOf(valorNuevo) === -1), se añade el nuevo valor. - Si el valor nuevo ya está en la lista, se mantiene el valor anterior.
Guardar y Probar el Script
- Guarda el script y regresa a tu hoja de cálculo.
- Prueba seleccionando diferentes géneros para ver cómo se actualizan las opciones múltiples en la celda de género.
Paso 3: Añadir un Menú Personalizado (Opcional)
Crear el Menú
Para hacer el uso del script más amigable, puedes añadir un menú personalizado:
- Añade el siguiente código al proyecto de Apps Script:
function onOpen() {
const ui = SpreadsheetApp.getUi();
ui.createMenu('Opciones Múltiples')
.addItem('Configurar Desplegable', 'configurarDesplegable')
.addToUi();
}
function configurarDesplegable() {
SpreadsheetApp.getUi().alert('El desplegable está configurado.');
}
- Guarda el script y recarga la hoja de cálculo para ver el nuevo menú.
Este menú no añade funcionalidad adicional, pero puede ser modificado para incluir configuraciones o acciones adicionales según tus necesidades.
Conclusión
Con este script, puedes crear desplegables con opciones múltiples en Google Sheets de manera eficiente. Este método es útil para categorías que pueden tener múltiples etiquetas y te permite mantener los datos organizados sin duplicados.
Con la opción actual de «Permitir varias selecciones» (dentro de Reglas de validación de datos) ya lo hace directamente Google Sheets sin necesidad de Appscript.
Tienes toda la razón!
Aquí te dejo un video donde muestro como usar esta función nativa
https://youtu.be/WbiCwKKsc90
Saludos!