如何让Google Sheets的onEdit脚本对所有编辑用户自动生效?
问题:Google Sheets onEdit脚本仅本人生效,其他用户无法触发
我有一段onEdit脚本,可记录Google Sheets特定列的修改日期,但目前仅本人编辑表格时生效,其他用户使用该表格时无法触发运行。该表格所有者为他人,请求其启用脚本即可让所有用户触发吗?是否还有其他解决方法?
附脚本代码:
function onEdit() { var s = SpreadsheetApp.getActiveSheet(); if (s.getName() !== "Form Responses 11") return; // exit if not in "Data" var r = s.getActiveCell(); if (r.getColumn() !== 18 ) return; // exit if not editing col D var nextCell = r.offset(0, 1); // make a stamp or remove the stamp based on current cell value if (r.getValue()) nextCell.setValue(new Date()) else nextCell.clear(); }
解答
1. 请求所有者启用脚本无法解决问题
普通onEdit()属于简单触发器,它的运行逻辑是:触发脚本的是当前编辑用户的权限,且脚本的归属权是你(添加脚本的人)。其他用户打开表格时,你的脚本对他们来说是「未授权的第三方脚本」,即使所有者启用,也无法让其他用户自动获得运行权限,所以这个方法无效。
2. 两种有效解决方法
方法一:让表格所有者接管脚本
让表格所有者打开表格的脚本编辑器,将你提供的这段onEdit()代码复制粘贴进去,保存并命名项目。此时脚本属于表格绑定的内置脚本,所有拥有表格编辑权限的用户触发编辑动作时,简单触发器会自动运行,无需额外授权。
方法二:改用可安装触发器(推荐)
如果需要更稳定的运行效果(比如避免简单触发器的权限限制),可以让所有者创建可安装触发器:
- 将原函数重命名(比如改为
recordEditDate),避免和简单触发器重名 - 打开脚本编辑器,点击「编辑」→「当前项目的触发器」→「添加触发器」
- 按以下配置设置:
- 运行函数:
recordEditDate - 部署类型:从电子表格
- 事件源:编辑时
- 保存后,所有者需要完成脚本权限授权
- 运行函数:
- 可安装触发器会以所有者的权限运行,无论谁编辑表格,都会触发日期记录,不受简单触发器的限制。
优化后的脚本(适配可安装触发器)
function recordEditDate(e) { // 使用事件对象e,避免依赖当前活动上下文,更可靠 if (!e) throw new Error("请通过触发器运行此函数"); var targetSheet = e.source.getActiveSheet(); if (targetSheet.getName() !== "Form Responses 11") return; var editedRange = e.range; if (editedRange.getColumn() !== 18) return; var dateCell = editedRange.offset(0, 1); if (editedRange.getValue()) { dateCell.setValue(new Date()); } else { dateCell.clear(); } }
- 改用事件对象
e获取编辑信息,比getActiveSheet()/getActiveCell()更高效,也能避免在可安装触发器中出现上下文错误。
内容的提问来源于stack exchange,提问作者Sneha ES
相关产品推荐
相关产品推荐

