脚本总结:
我的问题:我收到此错误:
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);
}
}
}
注意:
Browser.msgBox(sheetProtections[i].getRange())
并且Browser.msgBox(rangeProtections[j].getRange())
在相应while
循环之前,我根本不会收到任何错误。有人可以解释发生了什么事以及如何解决此问题吗?
更新:错误是由于i
和j
超出sheetProtections
和rangeProtections
长度引起的,相应地,不满足循环条件。
指示目标表和范围的另一种方法解决了该问题。
发生错误是因为找不到该名称的工作表或范围保护。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] 删除。
我来说两句