Puedo hacer que esto funcione para una columna completa, pero si tengo un NamedRange, llamaré a food de la siguiente manera.
| Verduras | Fruta | Carne |
|---|---|---|
| Zanahoria | Manzana | Cerdo |
| Papa | Naranja | Pollo |
| Nabo | Pera | Carne de res |
Luego quiero agarrar la columna debajo de la primera fila y luego agregarla a un menú desplegable.
Sé cómo completar el menú desplegable y puedo tomar una columna completa usando Mapa, pero ¿cómo obtengo solo los elementos debajo de la primera fila?
Creé el siguiente script de trabajo, pero cuando Logger.log (oneSet)
Obtengo toda la columna, incluido el encabezado. En cambio, quiero la columna de datos relevante sin el encabezado.
function selectCol(){ var ss = SpreadsheetApp.getActiveSpreadsheet(); var foodList = ss.getRangeByName("Food").getValues(); var oneSet = foodList.map(oneCol); function oneCol(one){ return one[2] }; Logger.log(oneSet); // [0] returns [Vegetables, Carrot, Potato, Turnip] // [1] returns [Fruits, Apple, Orange, Pear] // [2] returns [Meats, Pork, Chicken, Beef] // So what I want is: // [0] to return [Carrot, Potato, Turnip] // [1] to return [Apple, Orange, Pear] // [2] to return [Pork, Chicken, Beef] }Esta función construye los tres y los coloca justo debajo de cada lista.
function makeADropDown() { const ss = SpreadsheetApp.getActive(); const sh = ss.getSheetByName('Sheet0'); const vs = sh.getDataRange().getDisplayValues(); [...Array.from(Array(3).keys())].forEach(idx => { let r =SpreadsheetApp.newDataValidation().requireValueInRange(sh.getRange(2,idx + 1,sh.getLastRow()-1,1)).build(); sh.getRange(sh.getLastRow() + 1,idx + 1).setDataValidation(r); }) }Esta línea solo crea una matriz como [0,1,2] para ejecutar el ciclo 3 veces.
[...Array.from(Array(3).keys())]