如何用Google Apps Script创建表格编辑日志并获取所有编辑者邮箱
解决Google Sheets操作日志无法获取其他编辑者邮箱的问题
问题根源
你当前使用的onEdit(e)是简单触发,这种触发模式运行时无授权权限。对于非脚本所有者的编辑者,Session.getActiveUser().getEmail()会返回空值,仅你作为所有者能正常获取自己的邮箱。
解决方案:改用可安装触发器
可安装的onEdit触发器运行时携带授权,能获取所有已登录编辑者的邮箱地址,具体操作如下:
1. 修改脚本代码
将原函数重命名(避免与简单触发冲突),核心逻辑保留,调整后代码如下:
function logEdits(e) { const sName = e.source.getActiveSheet().getSheetName(); if (sName !== "Recent_Changes") { // 可安装触发器下可正常获取所有编辑者邮箱 const theUser = Session.getActiveUser().getEmail(); let value; const mA1 = e.range.getA1Notation().split(":")[0]; const time = new Date(); if (typeof(e.value) === 'string') { const aCell = e.source.getRange(mA1); value = aCell.getValue(); const form = "'" + aCell.getFormula(); } else { value = e.value; } const data = [sName, mA1, time, value, form, theUser]; e.source.getSheetByName("Recent_Changes").appendRow(data); } }
2. 创建可安装触发器
- 打开Google Sheets的脚本编辑器(路径:工具 > 脚本编辑器)
- 点击左侧菜单的触发器图标(时钟样式)
- 点击添加触发器,配置以下选项:
- 要运行的函数:
logEdits - 部署来源:
从工作表 - 事件类型:
编辑时
- 要运行的函数:
- 点击保存,按提示完成授权流程(需允许脚本访问Google账号信息)
注意事项
- 授权完成后,所有拥有该工作表编辑权限的用户,其操作都会被记录邮箱地址
- 确保
Recent_Changes工作表存在,且脚本具备向该表写入数据的权限 - 若后续修改脚本,需重新保存并确认触发器配置正常
内容的提问来源于stack exchange,提问作者Anthony Madle
相关产品推荐
相关产品推荐

