Estoy atascado. Tengo una hoja de cálculo con una lista desplegable que contiene los nombres de las hojas. ¿Es posible dentro de una función configurar la hoja de cálculo activa para que coincida con la selección desplegable?
function getNextCell() { // Active sheet should reflect dropdown selection // to find first empty cell of that sheet by dropdown var sheetTo = SpreadsheetApp.getActiveSheet(); var myValues = sheetTo.getRange('A:A').getValues(); var i; for (i = 0; i < myValues.length; i++) { if (myValues[i][0] === '') return i + 1; } return i + 1; }Hoja de muestra actualizada para mostrar el trabajo actual: https://docs.google.com/spreadsheets/d/1befqsGQvbPfn0XTGrygLOGcrUIMrICUagJVH0S-2rDw/edit?usp=sharing
Debo mencionar que probé una matriz pero eso no funcionó para mí. Es posible que lo haya estado utilizando mal, pero no estoy seguro.
function onEdit(e) { const sh = e.range.getSheet(); if(sh.getName() == "Dropdown" && e.range.columnStart == 8 && e.value) { e.source.getSheetByName(e.value).activate(); } }También puede crear la lista de todos los nombres de hojas para la validación de datos en la columna H con esto:
function makeColumnDropDown(col = 8) { const ss = SpreadsheetApp.getActive(); const list = ss.getSheets().map(sh => sh.getName()); const r = SpreadsheetApp.newDataValidation().requireValueInList(list); const sh = ss.getSheetByName("Dropdown"); sh.getRange(1,col,100).setDataValidation(r); }Si desea omitir algunos, también puede agregar un método .filter a la tercera línea y excluir una lista de nombres de archivo. Solo pregunta yo te muestro.
function getColumnHeight(col, sh, ss) { var ss = ss || SpreadsheetApp.getActive(); var sh = sh || ss.getActiveSheet(); var col = col || sh.getActiveCell().getColumn(); var rcA = []; if (sh.getLastRow()){ rcA = sh.getRange(1, col, sh.getLastRow(), 1).getValues().flat().reverse(); } let s = 0; for (let i = 0; i < rcA.length; i++) { if (rcA[i].toString().length == 0) { s++; } else { break; } } return rcA.length - s; }