Tengo una secuencia de comandos de la aplicación de Google que (entre otras cosas) proporciona una serie de menús desplegables en las celdas según los valores elegidos en la celda anterior. Esencialmente, cuando se selecciona un valor de celda, ese valor se usa en una búsqueda de Google Big Query y la siguiente celda se completa con valores de Big Query.
Hago cumplir la validación de las opciones disponibles en el menú desplegable a través de la siguiente función
function applyValidationToCell(list, cell) { //create a valdation rule, essentially that the available values must be in the list passed ot the function var rule = SpreadsheetApp.newDataValidation() //.requireValueInList(list) .requireValueInRange(list) .setAllowInvalid(false) .build(); cell.setDataValidation(rule); } Todo funcionó bien hasta que encontré un caso en el que hay más de 500 opciones en la lista de selección y me aparece el error The data validation rule has more items than the limit of 500. Use the 'List from a range' criteria instead.
Miré los documentos en https://developers.google.com/apps-script/reference/spreadsheet/data-validation-builder#requireValueInRange(Range) y también leí estas preguntas SO Necesita respuesta a "Los parámetros (número []) no coinciden con la firma del método para el error SpreadsheetApp.Range.setValues” y luego las respuestas útiles de @TheMaster en ¿Cómo se resuelve un error de "Los parámetros (número []) no coinciden con la firma del método para SpreadsheetApp.Range. setValues" y ¿Qué devuelve el método de rango getValues() y acepta setValues()?
Cuando estaba usando .requireValueInList(list) , la forma de los datos pasados a la función era ["Donruss","Leaf","Panini","Topps"]
Para lidiar con requireValueInRange , intenté modificar la estructura a matrices 2D como se sugiere en las respuestas anteriores, por ejemplo [["Donruss"],["Leaf"],["Panini"],["Topps"]] y [["Donruss","Leaf","Panini","Topps"]]
Sin embargo, siempre recibo el error Exception: The parameters (number[]) don't match the method signature for SpreadsheetApp.DataValidationBuilder.requireValueInRange.
¿Alguien puede aconsejarme sobre la forma correcta de pasar valores a requireValueInRange ?
Descripción
Aquí hay un ejemplo simple de cómo usar un rango para una regla de validación de datos.
En su caso, guarde los resultados de Big Query en una hoja usando setValues(), luego flush() y luego agregue la regla de validación de datos para la celda que le interesa.
Guion
function runTest() { try { let spread = SpreadsheetApp.getActiveSpreadsheet(); let sheet = spread.getSheetByName("Sheet1"); let cell = sheet.getRange("A6"); let range = sheet.getRange("A1:A4"); let rule = SpreadsheetApp.newDataValidation().requireValueInRange(range).build(); cell.setDataValidation(rule); } catch(err) { console.log(err); } }Referencia