跨多表格为多用户设置权限时.addEditors传入空白单元格报错如何解决
问题核心原因
addEditors() 方法仅接受由有效邮箱字符串组成的一维数组作为参数,原代码存在两个核心错误:
getValues()返回二维数组,你直接将未清洗的包含空单元格的数组传入,空单元格对应的值是空字符串,属于无效参数- 循环索引、变量赋值逻辑错误,导致传入了整列的二维数组而非对应行的用户邮箱
修正后代码
function TestProtection() { var ss = SpreadsheetApp.getActive(); ss.setActiveSheet(ss.getSheetByName('Store List'), true); var sheets = ['Sunday!C2:J2', 'MONDAY!C2:J2', 'TUESDAY!C2:J2']; // 读取用户列表,清洗空值 var userRange = ss.getActiveSheet().getRange('B2:B9').getValues(); var smuserRange = ss.getActiveSheet().getRange('C2:C9').getValues(); for (var j = 0; j < userRange.length; j++) { // 提取当前行的用户邮箱,过滤空值 var st = userRange[j][0].toString().trim(); var sm = smuserRange[j][0].toString().trim(); var validEditors = []; if (st) validEditors.push(st); if (sm) validEditors.push(sm); // 仅当有有效用户时才添加权限 if (validEditors.length > 0) { for (var i = 0; i < sheets.length; i++) { var range = ss.getRange(sheets[i]); var protection = range.protect().setDescription('S1'); protection.addEditors(validEditors); } } } }
关键调整说明
- 修正了循环索引,
j从0开始遍历,正确匹配B2到B9的每一行数据 - 对读取到的每个单元格值做去空、去首尾空格处理,仅保留有效邮箱
- 合并有效编辑者数组后再统一调用
addEditors(),避免传入空值触发报错 - 仅当存在有效编辑者时才执行权限设置操作,减少不必要的API调用
内容的提问来源于stack exchange,提问作者Dane Austin
相关产品推荐
相关产品推荐

