Google表格保护脚本问题-无法读取未定义的属性“ getRange”

亚尼夫·阿弗洛

脚本总结:

  1. 该脚本应遍历工作表保护和范围保护,并找到目标工作表和目标范围。
  2. 然后,检查当前用户是否具有编辑者的权限。
    1. 如果不是,则脚本将检查目标表和目标范围具有编辑权限的用户数是否小于允许的用户电子邮件列表中的数量。
      1. 如果是这样-该脚本将从目标工作表和目标范围中删除所有权限,然后将它们重新设置为允许的用户电子邮件列表。

我的问题:我收到此错误:

TypeError:无法在[两个while循环条件属性]读取未定义的属性'getRange'getRange

剧本:

function someFunction() {
  var ss = SpreadsheetApp.getActive();
  var sheetName = 'some sheet name';
  var rangeName = 'some range name';
  var targetSheet = ss.getSheetByName(sheetName);
  var targetRange = ss.getRangeByName(rangeName);
  // set permissions
  var permittedUserEmails = ['[email protected]','[email protected]','[email protected]','[email protected]','[email protected]'];
  var sheetProtections = ss.getProtections(SpreadsheetApp.ProtectionType.SHEET);
  var rangeProtections = ss.getProtections(SpreadsheetApp.ProtectionType.RANGE);
  var i = 0;
  while (sheetProtections[i].getRange().getSheet() != targetSheet {
    i++;
  }
  if (sheetProtections[i].canEdit() == false) {
    if (rangeProtections[i].getEditors().length < permittedUserEmails.length) {
      sheetProtections[i].remove();
      sheetProtections[i].addEditors(permittedUserEmails);
    }
  }
  var j = 0;
  while (rangeProtections[j].getRange() != targetRange {
    j++;
  }
  if (rangeProtections[j].canEdit() == false) {
    if (rangeProtections[j].getEditors().length < permittedUserEmails.length) {
      rangeProtections[j].remove();
      rangeProtections[j].addEditors(permittedUserEmails);
    }
  }
}

注意:

  1. 如果使用Browser.msgBox(sheetProtections[i].getRange())并且Browser.msgBox(rangeProtections[j].getRange())在相应while循环之前,根本不会收到任何错误。
  2. [email protected]是ss所有者。

有人可以解释发生了什么事以及如何解决此问题吗?

更新:错误是由于ij超出sheetProtectionsrangeProtections长度引起的,相应地,不满足循环条件。

指示目标表和范围的另一种方法解决了该问题。

艾伦·威尔斯

发生错误是因为找不到该名称的工作表或范围保护getProtections如果没有找到保护,方法将返回一个空数组。如果没有保护,它不会返回undefined或null。如果没有找到保护,它将返回一个空数组的真实值。这意味着空数组的长度为零。您正在i从零开始计算变量的计数,这是一个有效的索引,并且sheetProtections[i]即使在索引零的值未定义的情况下也不会返回错误

有多种方法可以解决这种情况,以下是一种可能。

function someFunction() {


  var ss = SpreadsheetApp.openById('1RwwWliVHscvvRLOZ4jTQNtQJOgoTSBAo43VRDMhKzoo');

  var sheetName = 'some';
  var rangeName = 'some';
  var targetSheet = ss.getSheetByName(sheetName);
  var targetRange = ss.getRangeByName(rangeName);
  // set permissions
  var permittedUserEmails = ['[email protected]','[email protected]','[email protected]','[email protected]','[email protected]'];

  var sheetProtections = ss.getProtections(SpreadsheetApp.ProtectionType.SHEET);
  var rangeProtections = ss.getProtections(SpreadsheetApp.ProtectionType.RANGE);

  Logger.log('sheetProtections: ' + sheetProtections)

  var L = sheetProtections.length;
  Logger.log("L: " + L)
  var i = 0;

  while (i < L) {//If i reaches the L number then it stops - If L is zero and i is zero then zero is not less than zero
    Logger.log('i ' + i)
    if (sheetProtections[i].getRange().getSheet() === targetSheet;) {
      break;
    }

    i++;//decrement
  }

  if (sheetProtections[i].canEdit() == false) {
    if (rangeProtections[i].getEditors().length < permittedUserEmails.length) {
      sheetProtections[i].remove();
      sheetProtections[i].addEditors(permittedUserEmails);
    }
  }

  L =  rangeProtections.length;

  var j = 0;

  while (j < L) {
    if (rangeProtections[j].getRange() === targetRange) {
      break;
    }
    j++;
  }

  if (rangeProtections[j].canEdit() == false) {
    if (rangeProtections[j].getEditors().length < permittedUserEmails.length) {
      rangeProtections[j].remove();
      rangeProtections[j].addEditors(permittedUserEmails);
    }
  }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Google表格脚本getRange参数问题

DM用户问题:无法读取未定义的属性“ getMaxListeners”

问题是:无法读取未定义的属性“播放”

节点 - 类型错误:无法读取未定义的属性“问题”

无法读取回调中未定义问题的属性

表示问题TypeError:无法读取未定义的属性“方法”

React TypeError:无法读取未定义问题的属性“categoryName”

Google Charts API:无法读取未定义的属性“ toArrays”

无法读取未定义的Google图表的属性“ DataTable”

Google函数:TypeError:无法读取未定义的属性“名称”

TypeError:无法读取未定义的属性“ upgradeElements”,问题2是TypeError:无法读取未定义的属性“ downgradeElements”

× TypeError:无法读取未定义的属性“地图” - google.maps 未定义(React)

ReferenceError: 数组未定义 getRange().setvalues()

无法读取 Google Apps 脚本中未定义的属性“xyz”...即使明确定义了变量

类型错误:无法读取未定义的 Google 电子表格 API 的属性“0”

Google Apps脚本-TypeError:无法从未定义中读取属性“ 0”

Google App脚本-映射时发生错误-TypeError:无法读取未定义的属性“ map”

无法从未定义中读取属性“ 0”。错误的Google Apps脚本

类型错误:无法读取未定义的属性“0”(Google App 脚本)

TypeError:无法读取未定义onEdit的属性“源”-Google Apps脚本

通过 Google Apps 脚本解析 XML 提要(无法读取未定义的属性“getChildren”)

反应问题无法在测验应用程序中读取未定义的属性(读取“地图”)?

Javascript - FirebaseClould 问题:无法读取未定义的属性(读取“路径”)

Google Apps脚本getRange()语法

Angular:无法读取未定义的属性“forEach” - 问题(即使应该定义)

React Hooks问题:无法处理的拒绝(TypeError):无法读取未定义的属性“ signup”

在 React 中使用受保护的路由时无法读取未定义的属性“推送”

酶模拟提交表格,无法读取未定义的属性“值”

无法读取未定义的属性“替换”(在克隆的HTML表格上)