Google Sheets编辑者无法触发onEdit用户戳记脚本的解决需求
解决Google Sheets中onEdit脚本对所有编辑者生效的问题
首先得明确你遇到的核心问题:简单触发(Simple Trigger)的onEdit函数有严格的权限限制——它以匿名身份运行,无法获取非所有者用户的身份信息(比如Session.getActiveUser()对编辑者会返回空),而且编辑者手动授权脚本也没用,因为简单触发的权限绑定的是脚本所有者的身份,不是触发用户的。
Norbert Wagner提到的菜单授权方案本质上是让用户手动触发函数完成授权,但更可靠的方案是改用可安装触发器(Installable Trigger),并配置正确的运行身份,这样所有编辑者触发脚本时都能正常获取自己的身份信息。
解决方案步骤
1. 修改你的脚本代码
把原来的onEdit函数重命名(避免和简单触发冲突),并替换身份获取方式为e.user(触发脚本的用户对象),代码如下:
function recordEdit(e) { // 你的表格参数 var sheetName = "Arkusz1"; var dateModifiedColumnIndex = 3; // C列 var dateModifiedColumnLetter = 'C'; var range = e.range; var sheet = range.getSheet(); // 只在目标工作表生效 if (sheet.getName() !== sheetName) return; // 如果编辑的是标记列本身,跳过避免循环触发 if (range.getColumn() === dateModifiedColumnIndex) return; var row = range.getRow(); // 获取触发用户的邮箱,处理匿名或无法获取的情况 var user = e.user ? e.user.getEmail() : "Unknown User"; if (user.includes('@gmail.com')) { user = user.replace('@gmail.com', ''); } // 更新对应行的标记列 var dateModifiedRange = sheet.getRange(dateModifiedColumnLetter + row); dateModifiedRange.setValue(user); }
2. 创建可安装触发器(必须由文档所有者操作)
作为文档所有者,按以下步骤创建触发器:
- 打开Google Sheets的脚本编辑器(
工具->脚本编辑器) - 点击左侧菜单的
触发器图标(时钟形状) - 点击
添加触发器按钮,配置以下选项:- 选择要运行的函数:
recordEdit - 选择事件源:
电子表格 - 选择事件类型:
编辑时 - 选择运行身份:以触发该触发器的用户身份运行(这是关键!确保脚本用编辑者的权限执行)
- 通知设置:按需选择(比如选择“失败时通知我”)
- 选择要运行的函数:
3. 编辑者首次触发时的授权
当编辑者第一次修改表格内容时,会弹出授权提示,让他们允许脚本访问自己的身份信息。只要点击允许,后续修改就能自动触发脚本并留下姓名戳记了。
关键说明
- 为什么
e.user能获取到编辑者身份?:可安装触发器设置为“以触发用户身份运行”时,会使用编辑者的权限上下文执行脚本,e.user就是触发该操作的用户对象,能正确获取邮箱(前提是用户没有限制脚本访问个人信息)。 - 外部用户的特殊情况:如果编辑者是外部用户(不在你的Google Workspace组织内),可能无法获取邮箱,这时候脚本会显示
Unknown User,你可以改成用e.user.getDisplayName()获取用户名,或者添加提示逻辑。 - 避免循环触发:代码里添加了“如果编辑的是标记列则跳过”的判断,防止修改C列时再次触发脚本导致循环。
内容的提问来源于stack exchange,提问作者Marcin Stańczyk
相关产品推荐
相关产品推荐

