He estado trabajando en una hoja para hacer una calculadora que usaré en mi trabajo, tiene muchas funciones personalizadas, funciona bien. Pero tengo como 10 funciones que deben ejecutarse, por lo que he usado disparadores para ejecutar esas funciones cada vez que se editó la hoja. Pero dejó de funcionar y consumía demasiados recursos (ejecutaba todas las funciones cada vez que se editaba algo).
Entonces, ¿cómo puedo crear una función de activación que ejecute una de mis funciones personalizadas solo si se edita un valor de celda específico?
En este ejemplo, quiero que la función ifEntrada() se ejecute cuando se modifique el valor en la celda B4:
function ifEntrada() { var calcular_range = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Apartamentos").getRange("B4"); var calcular = calcular_range.getValue(); if (calcular == "Inserir Valor Manualmente") { showRows_entrada_manual(); } else { hideRows_entrada_manual() } }Obviamente, ha declarado desencadenantes que observan ediciones en la hoja que fácilmente pueden encontrarse con límites de frecuencia. Tienes que usar la función integrada onEdit() en su lugar:
function onEdit(e) { var activeRow = e.range.getRow(); var activeCol = e.range.getColumn(); if (activeCol == 2 && activeRow == 4) ifEntrada(); // "2" represents the B } function ifEntrada() { var ss = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Apartamentos'); // do things } Tenga en cuenta que las ediciones realizadas en un rango con la celda B4 monitoreada activarán la función onEdit solo si B4 es la primera celda donde la edición tiene efecto.