Google App Scripts onEdit触发器触发后权限请求失败问题
问题原因
你现在用的onEdit属于Google App Script的简单触发器,这类触发器有严格的权限限制,天生不支持调用SpreadsheetApp.openById()访问其他工作簿,和你有没有手动授权没有关系,这是平台写死的规则。你之前跑测试函数能成功,是因为手动运行函数时走的是全权限模式,和触发器自动触发的权限模式完全不是一回事。
解决步骤
不用改你已经写好的业务逻辑,只要换成可安装触发器就行——可安装触发器运行时会使用你授予的完整权限,能正常跨工作簿操作:
- 打开脚本编辑器,点左侧栏时钟样式的「触发器」入口
- 点右下角「添加触发器」
- 下拉选择要运行的函数:选你写的
onEdit就可以,怕和内置简单触发器重名的话,也可以把函数改个名比如handleEdit,不影响逻辑 - 事件源选「来自电子表格」,事件类型选「编辑时」
- 点保存,按弹出的提示走完授权流程就完成配置
- 之前写的
test_onEdit测试函数可以直接删掉,没有作用了
补充提醒
- 你现在复制的是
A2单个单元格,写入的时候取目标表最后一行+1的第1列,范围大小和数据匹配,这部分代码是对的。后续如果要复制多行多列区域,记得调整getRange的行列参数,保证写入范围的行列数和你拿到的data二维数组的行列数完全一致,不然会报错。 - 可安装触发器是用创建者的权限运行的,哪怕是其他用户编辑表格触发脚本,也是用你的权限跨表复制数据,注意控制表格的编辑权限范围,避免不必要的数据风险。
- 简单触发器本身能做的事非常有限,凡是涉及访问外部文件、发邮件、调用外部接口的操作,都不要指望简单触发器能跑,直接用可安装触发器即可。
内容的提问来源于stack exchange,提问作者Sven
相关产品推荐
相关产品推荐

