使用BetterLog时onEdit(e)触发器触发失败,遇权限错误
解决onEdit触发器调用BetterLog时的权限错误问题
问题根源
默认的onEdit(e)属于简单触发器,它是以匿名身份运行的,存在严格的权限限制——无法调用需要用户授权的服务或方法。而BetterLog.useSpreadsheet(sheetId)内部会执行SpreadsheetApp.openById(),这个方法需要https://www.googleapis.com/auth/spreadsheets权限,刚好超出了简单触发器的权限范围。
你添加的@NotOnlyCurrentDoc注释仅对可安装触发器生效,对简单触发器完全不起作用,所以无法解决问题。
解决方法
1. 替换为可安装触发器
- 把原有的
onEdit(e)函数重命名(比如改成customOnEdit(e)),避免和系统默认的简单触发器冲突。 - 在Google Apps Script编辑器左侧点击「触发器」图标(闹钟样式),点击「添加触发器」:
- 选择要运行的函数:
customOnEdit - 部署来源选「Head」
- 事件源选「电子表格」
- 事件类型选「编辑时」
- 保存时按照提示完成授权流程。
- 选择要运行的函数:
2. 保留必要的权限注释
确保@NotOnlyCurrentDoc注释放在脚本最顶部(所有函数之外),示例代码:
/** * @NotOnlyCurrentDoc */ function customOnEdit(e) { var sheetId = "你的日志表格ID"; var Logger = BetterLog.useSpreadsheet(sheetId); // 你的编辑逻辑和日志输出代码 }
核心说明
可安装触发器是以你的用户身份运行的,拥有账号的完整权限,能正常调用需要授权的服务;而简单触发器仅适用于无需额外权限的轻量编辑操作,一旦涉及跨文档访问、外部API调用等场景,必须改用可安装触发器。
内容的提问来源于stack exchange,提问作者Sebastien Berthelot
相关产品推荐
相关产品推荐

