如何让Google Sheets脚本仅在表格首次加载时运行?附问题代码
问题解答
1. 关于Property值保留的问题
你的预期是错误的,代码本身没有问题。
PropertiesService.getScriptProperties()获取的是脚本级别的持久化存储,这里的键值对会永久保留,除非你主动调用deleteProperty('firstRun')删除属性,或者重置脚本的属性存储。无论你关闭再重新打开表格,甚至间隔多日再访问,只要脚本没修改这个属性,它就会一直存在。
如果你的需求是每次打开表格时都能重新触发"First load"提示(比如按会话重置),可以结合时间逻辑实现,或者根据场景选择PropertiesService.getUserProperties()(用户级持久化存储,仅对当前用户生效)。
2. 区分onOpen的触发来源
可以区分,核心是检查事件参数e:
- 当表格启动自动触发
onOpen时,e是包含触发信息的对象(比如带有e.authMode、e.source等属性); - 当你在脚本编辑器里手动执行
onOpen函数时,e为undefined。
修改后的示例代码:
function onOpen(e) { Browser.msgBox("All loads"); // 区分触发来源 if (e) { Browser.msgBox("从表格启动触发"); } else { Browser.msgBox("从脚本编辑器手动执行"); } var LOCscriptProperties = PropertiesService.getScriptProperties(); var LOCisFirstRun = LOCscriptProperties.getProperty('firstRun'); if (LOCisFirstRun != "AlreadyRun") { LOCscriptProperties.setProperty('firstRun', 'AlreadyRun'); Browser.msgBox("First load"); } }
内容的提问来源于stack exchange,提问作者user23341160
相关产品推荐
相关产品推荐

