You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

跨多表格为多用户设置权限时.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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 10:36:05