如何让Google Sheets受保护A列的时间戳脚本对所有用户生效?
解决Google Sheets保护列后脚本无法写入的问题
问题根源在于你使用的是简单触发器onEdit(),它会以当前编辑用户的权限运行。当A列被保护后,没有该列编辑权限的用户触发脚本时,脚本无法突破权限限制写入A列。
解决方法是改用可安装的编辑触发器,它会以脚本所有者的权限执行,不受普通用户的权限限制。以下是实现代码和设置步骤:
修改后的代码
function addTimestampInstallable(e) { var row = e.range.getRow(); var col = e.range.getColumn(); var startRow = 2; var targetColumn = 3; var wsName = "xxxxxx"; // 替换成你的目标工作表名称 // 校验触发条件:目标列、目标行范围、目标工作表 if (col === targetColumn && row >= startRow && e.source.getActiveSheet().getName() === wsName) { var sheet = e.source.getActiveSheet(); var timestampCell = sheet.getRange(row, 1); // 仅当A列对应单元格为空时写入时间戳 if (timestampCell.getValue() === "") { var currentDate = Utilities.formatDate(new Date(), "GMT-7", "MM/dd/yyyy hh:mm aaa"); timestampCell.setValue(currentDate); } } }
设置可安装触发器的步骤
- 打开Google Sheets的脚本编辑器(点击
扩展程序->Apps 脚本) - 点击左侧菜单栏的触发器图标(时钟形状)
- 点击
添加触发器按钮,按以下配置设置:- 要运行的函数:
addTimestampInstallable - 部署来源:
Head - 事件来源:
从电子表格 - 事件类型:
编辑时
- 要运行的函数:
- 点击保存,按照提示完成授权(需脚本所有者完成授权流程)
保护A列的正确设置
完成触发器配置后,正常设置A列保护即可:
- 选中A列,右键选择
保护范围和工作表 - 设置权限为
仅您和您添加的用户,仅添加需要手动编辑A列的用户,其余用户设为查看者
这样无论哪个用户编辑C列,脚本都会以所有者权限写入A列的时间戳,同时普通用户无法手动修改A列内容。
内容的提问来源于stack exchange,提问作者Luciano Pizarro
相关产品推荐
相关产品推荐

