Al hacer clic en "botón 1", me gustaría que el código verifique la primera celda (columna A) de las filas 38-58 y oculte la fila si la celda correspondiente está vacía y muestre si no lo está.
Vacío en este caso significa que la celda todavía tiene una fórmula pero está en blanco. Si eso no es posible, la "Condición Oculta" puede ser Celdas que no son un número.
Me gustaría combinarlo con el siguiente código, que oculta y muestra las filas 10 y 11 cuando las celdas C4 y D4 equivalen a 0 respectivamente.
function button2(){ var ss = SpreadsheetApp.getActive(); var sheet = ss.getActiveSheet(); var cellRef1 = "C4"; var cellRef2 = "D4"; var cell1 = sheet.getRange(cellRef1); var cell2 = sheet.getRange(cellRef2); var value1 = cell1.getValue(); var value2 = cell2.getValue(); if (value1 == "0"){ sheet.hideRows(10); } if (value2 == "0"){ sheet.hideRows(11); } if (value1 != "0"){ sheet.showRows(10); } if (value2 != "0"){ sheet.showRows(11); }; };Puede ocultar/mostrar las filas de esta manera:
function hide_unhide_rows() { var sheet = SpreadsheetApp.getActiveSheet(); var rows = sheet.getRange('a38:a58').getDisplayValues().flat(); rows.forEach((cell_value,i) => { let index = i+38; if (cell_value == '' && !sheet.isRowHiddenByUser(index)) sheet.hideRows(index); if (cell_value != '' && sheet.isRowHiddenByUser(index)) sheet.unhideRows(index); }); }En cuanto a cómo se puede combinar con su código, simplemente puede agregar al final de su función esta línea:
hide_unhide_rows();O, aquí está el código combinado completo:
function button2() { var sheet = SpreadsheetApp.getActiveSheet(); var value1 = sheet.getRange('c4').getValue(); var value2 = sheet.getRange('d4').getValue(); if (value1 == 0) { sheet.hideRows(10) } else { sheet.showRows(10) } if (value2 == 0) { sheet.hideRows(11) } else { sheet.showRows(11) } var rows = sheet.getRange('a38:a58').getDisplayValues().flat(); rows.forEach((cell_value, i) => { let index = i+38; if (cell_value == '' && !sheet.isRowHiddenByUser(index)) sheet.hideRows(index); if (cell_value != '' && sheet.isRowHiddenByUser(index)) sheet.unhideRows(index); }); }Actualizar
Si tiene varios rangos para procesar, debe cambiar varias líneas en el código de esta manera:
function button(){ var sheet = SpreadsheetApp.getActiveSheet(); var value1 = sheet.getRange('c4').getValue(); var value2 = sheet.getRange('d4').getValue(); if (value1 == 0) { sheet.hideRows(10) } else { sheet.showRows(10) } if (value2 == 0) { sheet.hideRows(11) } else { sheet.showRows(11) } var list = ['a27:a29','a41:a60','a66:a85']; // <----------------- here var rangeList = sheet.getRangeList(list).getRanges(); // <------- here for (var range in rangeList){ var rows = rangeList[range].getDisplayValues().flat(); var shift = +list[range].split(':')[0].slice(1); // <---------- here rows.forEach((cell_value, i) => { let index = (i + shift); // <-------------------------------- here if (cell_value == '' && !sheet.isRowHiddenByUser(index)) sheet.hideRows(index); if (cell_value != '' && sheet.isRowHiddenByUser(index)) sheet.showRows(index); }); } }Si tiene demasiados rangos, el código puede funcionar lentamente. Hay una manera de mejorarlo un poco. Pero la operación de ocultar/mostrar es lenta por diseño. Entonces, el código será bastante lento de todos modos.