如何实现scriptIsRunByUserManually()判断脚本手动/触发器执行?
判断脚本执行来源的实现方法
要区分Google Apps Script是由用户手动执行(自定义菜单、按钮)还是触发器触发,可以通过以下两种方法实现scriptIsRunByUserManually()函数:
方法1:通过UI可用性判断
触发器(如时间驱动、表单提交触发)运行在无UI的服务器环境中,调用SpreadsheetApp.getUi()会抛出异常;而手动执行时能正常获取UI对象。基于此特性实现判断:
function scriptIsRunByUserManually() { try { SpreadsheetApp.getUi(); return true; } catch (e) { return false; } }
逻辑说明:尝试获取UI对象,成功则为手动执行;捕获到异常则为触发器或其他无UI环境执行。
方法2:通过执行上下文判断
使用ScriptApp.getExecutionContext()获取执行上下文,通过getTriggerSource()方法直接判断触发来源:
function scriptIsRunByUserManually() { const context = ScriptApp.getExecutionContext(); return context.getTriggerSource() === ScriptApp.TriggerSource.MANUAL; }
逻辑说明:ScriptApp.TriggerSource.MANUAL对应手动触发场景(自定义菜单、按钮点击),其他枚举值(如CLOCK、FORM_SUBMIT)均为触发器触发。
两种方法均可满足需求,方法1兼容性更强,方法2逻辑更直观明确,可根据实际场景选择使用。
内容的提问来源于stack exchange,提问作者roma
相关产品推荐
相关产品推荐

