Hace tiempo que vi un vídeo de mis amigos de Nivel pro y del grupo de Facebook "A-Z [Excel, google sheets, visual basic, power bi & +]" donde trataban un ejemplo de listas desplegables dependientes y hasta sugerí una forma diferente de hacerlo, más el ejemplo no lo he subido a Youtube ni en este sitio.
El día de hoy (31/08/2020) también vi una pregunta en el foro de Google Drive que trata , a mi saber y entender sobre como hacer listas de validación por lotes, aunque esta difiere de la primer en que esta ultima no es dependiente de otra lista, si lo es el hecho de poder hacerlo por lotes o un determinado numero de filas o rangos en Google sheets.
por ello vamos a partir de los consejos que nos da la propia documentación de Google sheets en esta materia, siendo la url de consulta la siguiente :
https://developers.google.com/apps-script/reference/spreadsheet/range#setdatavalidationrule
de la cual vamos a crear nuestra prueba base y a partir de ahí construir nuestra propia función para crear las validaciones necesarias según el numero de filas en la HCG (Hoja de cálculo de Google)
al consultar la url obtenemos un ejemplo como este:
Consideraciones:
se hace referencia con la variable cell, a la celda A1(donde se creara la lista de validación).
con la variable range, se establecen los datos que conformaran la lista de validación o desplegable
se establece una nueva la regla de validación, se requiere el rango de datos con la variable range creada previamente en el paso anterior y se construye con el método "build"
finalmente el A1 , se establece la validación
Estos 4 pasos , son los que vamos a usar para reproducir la validación de listas, pero con la salvedad de que usaremos un bucle "For" para que vaya haciendo la validación por rangos de datos según la fila
Para ello , hemos dispuesto 13 filas de datos de ejemplo , sin intentar quebrarnos mucho la cabeza 🤠, solo con intención de visualizarlos en las listas de validación correspondientes a cada rango, tal como se observa en la imagen siguiente:
Como puede observarse en la imagen anterior, también incluiré un menú personalizado para ejecutar el script creado
podemos apreciar igualmente, el ejemplo que nos ofrece la documentación oficial , debidamente adaptado al caso que nos ocupa con nuestra HCG de ejemplo
Resumiendo.-el código empleado, es el siguiente, el cual se adapto para mayor facilidad:
si el tema fue de utilidad y quieres tener una copia, para una análisis más rápido del codigo y probarlo, puedes pedirla en el video que estará saliendo próximamente:
Síguenos y suscríbete en:
function onOpen(e) {
SpreadsheetApp.getUi()
.createMenu('📜 Validacion por Lotes')
.addItem('📑 crear listas', 'ValidacionPorLotes')
.addItem('❌ Quita listas', 'QuitarTodasValidaciones')
.addToUi();
}
function creaValiacionSimple() {
var cell = SpreadsheetApp.getActive().getRange('A1');
var range = SpreadsheetApp.getActive().getRange('B2:E2');
var rule = SpreadsheetApp.newDataValidation().requireValueInRange(range).build();
cell.setDataValidation(rule);
}
function QuitarValidacionSimple() {
var ss = SpreadsheetApp.getActive();
ss.getRange('A1').clearDataValidations();
}
//======================= validaciones por lotes ============================================
function ValidacionPorLotes(){
var ss= SpreadsheetApp.getActive();
var ufila = ss.getLastRow();
for(var i=1; i<= ufila; i++){
var celda = ss.getRange("A"+i);
var rango =ss.getRange("B"+i +":"+"E"+i);
var regla = SpreadsheetApp.newDataValidation().requireValueInRange(rango).build();
celda.setDataValidation(regla);
}
SpreadsheetApp.getUi().alert('validaciones terminadas por: "Ofimática P/Emprendedores"')
}
function QuitarTodasValidaciones() {
var ss = SpreadsheetApp.getActive();
var ufila = ss.getLastRow();
ss.getRange('A1:A'+ufila).clearDataValidations();
}