Google Sheet保护时间戳列时自动更新失效问题求助
解决Google Sheet时间戳自动更新与列保护冲突的问题
这个问题的核心原因很明确:你当前使用的onEdit是简单触发器,它会以当前进行编辑操作的用户权限来运行。当你保护了时间戳列后,普通用户没有该列的编辑权限,所以即使脚本想写入时间戳,也会因为权限不足而失败。
下面是具体的解决方案:
改用可安装的编辑触发器
可安装触发器可以使用脚本所有者的权限来执行操作,只要你(脚本所有者)拥有被保护列的编辑权限,就能绕过普通用户的权限限制,正常写入时间戳。
步骤1:修改脚本代码
先把原脚本的函数名修改一下(避免和简单触发器重名),同时整理代码格式提升可读性:
function onEditTimestamp(event) { var timezone = "IST"; var timestamp_format = "MM-dd-yyyy HH:mm"; // 时间戳格式 var date = Utilities.formatDate(new Date(), timezone, timestamp_format); var range = event.range; // 最后编辑的单元格 var column = range.getColumn(); // 获取编辑单元格的列号 var rangeValue = range.getValue(); // 获取编辑单元格的值 // 定义需要触发时间戳的列(原脚本中的列号集合) var targetColumns = [10, 12, 16, 18, 20, 22, 26, 30, 32, 36, 40, 44]; // 检查是否是目标列,且单元格有值/无值 if (targetColumns.includes(column)) { var newRange = range.offset(0, 1); // 编辑单元格右侧的单元格(时间戳位置) if (rangeValue) { newRange.setValue(date); } else { newRange.setValue(""); } } }
步骤2:创建可安装触发器
- 打开Google Sheet的脚本编辑器(工具→脚本编辑器)
- 点击顶部菜单的编辑→当前项目的触发器
- 点击右下角的添加触发器按钮,按以下配置设置:
- 选择要运行的函数:
onEditTimestamp - 选择部署的来源:电子表格
- 选择事件类型:编辑时
- 选择要运行的函数:
- 点击保存,按照提示完成授权(需要允许脚本访问你的Google Sheet数据)
关键注意事项
- 确保你(脚本所有者)对被保护的时间戳列拥有编辑权限,这样触发器才能以你的权限写入时间戳
- 保护范围的设置中,不需要给普通用户开放时间戳列的编辑权限,触发器会自动处理写入操作
这样配置后,普通用户在目标列录入或删除数据时,脚本会以你的权限自动更新右侧的时间戳,同时普通用户无法手动修改时间戳列,完美解决你的需求。
内容的提问来源于stack exchange,提问作者Nidhi
相关产品推荐
相关产品推荐

