Google Sheets脚本编辑受保护单元格权限异常问题求助
解决Google Sheets脚本编辑受保护单元格的权限问题
问题原因
按钮触发的函数属于简单触发器,会以点击按钮的当前用户身份执行。如果该用户不在受保护范围的例外编辑列表中,就会触发保护限制,导致报错。
解决方案
方法一:使用可安装触发器(推荐)
这种方式让脚本以创建者(安装者)的身份运行,不受当前用户的权限限制:
- 先移除表格按钮与
ABC函数的绑定
- 先移除表格按钮与
- 打开脚本编辑器,点击左侧时钟图标进入触发器管理页面
- 点击「添加触发器」,配置如下:
- 选择要运行的函数:
ABC - 事件源:从电子表格
- 事件类型:点击时
- 运行身份:选择「我(你的邮箱账号)」
- 保存并完成权限授权
- 返回表格,重新为按钮绑定这个可安装触发器对应的
ABC函数
- 返回表格,重新为按钮绑定这个可安装触发器对应的
设置完成后,用户点击按钮时,脚本会以你的身份执行(只要你有编辑受保护范围的权限),就能成功写入A1单元格,同时用户手动仍无法编辑该单元格。
方法二:临时修改保护规则(适合特定场景)
如果需要让用户自身运行脚本时也能编辑,可以在脚本中临时移除保护,写入内容后再恢复保护:
function ABC() { var arkusz = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Podsumowanie"); var targetRange = arkusz.getRange("A1"); var protections = arkusz.getProtections(SpreadsheetApp.ProtectionType.RANGE); // 定位A1的保护规则并移除 for (var i = 0; i < protections.length; i++) { var protection = protections[i]; if (protection.getRange().getA1Notation() === "A1") { protection.remove(); break; } } // 写入目标值 targetRange.setValue("123"); // 重新创建保护规则,保留指定用户的编辑权限 var newProtection = targetRange.protect().setDescription("A1单元格保护"); // 移除默认编辑器,仅保留特定用户 newProtection.removeEditors(newProtection.getEditors()); newProtection.addEditor("指定用户邮箱@xxx.com"); // 启用严格保护(非警告模式) newProtection.setWarningOnly(false); }
注意:此方法要求运行脚本的用户具备修改保护规则的权限,否则仍会报错。
内容的提问来源于stack exchange,提问作者Kacper Kanarkowski
相关产品推荐
相关产品推荐

