Google Sheets脚本:仅所有者可自动取消复选框,其他用户失效?
问题:Google Sheets onEdit触发器中普通用户无法取消复选框,所有者正常生效
问题背景
作为Google Workspace管理员,我开发了一套供教师创建订单列表的脚本,核心功能包括:
- 复制隐藏的模板工作表
- 自动将学校名称、教师姓名填入新生成的工作表
- 复制原模板的工作表保护规则
为了避免教师重复授权脚本运行,我使用onEdit触发器实现触发逻辑:教师勾选"Instructie"工作表J8单元格的“I want to order”复选框时,自动触发订单列表生成脚本,同时在脚本运行后自动取消该复选框。但出现异常:我作为表格所有者触发时,复选框能正常取消;但共享的教师触发时,复选框始终无法取消。
初始触发代码
function onEdit(e) { var sheet = e.source.getSheetByName('Instructie'); var range = e.range; // 检查操作是否在'Instructie'工作表,且J8复选框被勾选 if (sheet.getName() == 'Instructie' && range.getValue() == true && range.getA1Notation() == 'J8') { NieuweBestellijst(); // 将J8和J10的复选框设为FALSE,但仅对表格创建者/所有者生效,其他编辑者不行 sheet.getRange('J8').setValue(false); } }
临时测试现象
我临时添加了onOpen触发器执行相同的取消勾选逻辑,结果所有用户(包括教师)都能正常取消复选框,这让我感到困惑。
修复后的代码
调整代码后问题解决,修复后的代码如下:
function onEdit(e) { var sheet = e.source.getSheetByName('Instructie'); var range = e.range; if (sheet.getName() == 'Instructie' && range.getValue() == true && (range.getA1Notation() == 'J8' || range.getA1Notation() == 'J10')) { if (range.getA1Notation() == 'J8') { range.setValue(false); NieuweBestellijst(); } } }
原因推测
推测问题根源可能是:脚本执行时会切换到新生成的工作表,普通用户需要让原"Instructie"工作表保持焦点一段时间才能完成复选框的状态修改,而表格所有者不受这个限制,疑似是Google Sheets的某种防护机制。另外,将sheet.getRange('J8').setValue(false)改为range.setValue(false)仅为代码优化,对问题解决没有实质影响。
内容的提问来源于stack exchange,提问作者Marc van Maastricht
相关产品推荐
相关产品推荐

