Google Apps Script获取表格编辑用户邮箱/ID失效,求解决办法
解决Google Sheets onEdit触发器无法获取当前编辑用户信息的问题
核心问题在于简单触发onEdit()处于受限运行模式,无法调用需要用户授权的Session.getActiveUser()或Session.getEffectiveUser(),这类触发会以匿名身份运行,只能返回表格所有者信息,而非当前编辑用户。
可行解决方案:改用可安装onEdit触发器
可安装触发器会以当前编辑用户的身份运行,能正常获取用户邮箱/ID,步骤如下:
- 替换原触发函数
删除旧的onEdit()、whatsMyName()、getCurrentUserEmail(),使用以下代码:
function onEditTrigger(e) { // 仅处理exampleSheet的编辑 const targetSheet = e.source.getSheetByName("exampleSheet"); if (!targetSheet || e.range.getSheet().getName() !== "exampleSheet") return; // 检查是否编辑了第6列(完成任务标记列) if (e.range.getColumn() === 6) { // 获取对应第2列的单元格 const signatureCell = targetSheet.getRange(e.range.getRow(), 2); // 仅当单元格为空时写入标识 if (signatureCell.getValue() === "") { const currentUserEmail = e.user.getEmail(); // 根据邮箱设置标识 if (currentUserEmail === "example@eMail.com") { signatureCell.setValue("EI"); } } } }
- 直接通过事件对象
e.user获取当前编辑用户的邮箱,无需额外函数调用,更可靠。 - 使用事件对象
e获取编辑上下文,避免并发编辑时的错误。
- 创建可安装触发器
- 打开Google Sheets,点击「工具」>「脚本编辑器」。
- 点击左侧菜单栏的闹钟图标(触发器)。
- 点击「添加触发器」,按以下设置:
- 选择要运行的函数:
onEditTrigger - 选择事件源:「从电子表格」
- 选择事件类型:「当更改时」
- 选择要运行的函数:
- 保存并完成授权(需允许脚本访问用户基本信息)。
原代码失效原因说明
- 旧的
whatsMyName()依赖Session.getEffectiveUser(),但简单触发下该方法返回表格所有者,而非当前编辑用户。 getCurrentUserEmail()中的保护单元格方案是早期的临时hack,现已被Google的安全策略限制,无法正确获取当前用户。
内容的提问来源于stack exchange,提问作者Joel
相关产品推荐
相关产品推荐

