Google Apps Script多范围未保护设置报错:Range not found求解
问题解决:Google Apps Script 设置多个未保护范围报错
错误原因分析
你遇到的Exception: Range not found错误,核心原因是:
getRange()方法不支持传入多个分散的A1符号数组,它仅接受单个连续范围字符串,或[row, column, numRows, numColumns]格式的参数。getRangeList()返回的是RangeList对象,但setUnprotectedRanges()要求传入的是Range对象数组,而非RangeList本身,直接传入会不兼容。
两种可行解决办法
方法一:循环中直接存储Range对象
在遍历过程中,直接创建每个单元格的Range对象并存入数组,最后直接传给setUnprotectedRanges():
var outputArray = []; var ss = SpreadsheetApp.getActiveSheet(); for (var i = 27; i < 841; i += 24) { // 直接创建Range对象并加入数组 outputArray.push(ss.getRange("A" + i)); } var protection = ss.protect(); // 直接传入Range对象数组 protection.setUnprotectedRanges(outputArray);
方法二:通过RangeList转换为Range数组
如果已经有了A1符号的数组,可以用getRangeList()获取范围列表,再通过getRanges()方法转换为Range对象数组:
var outputArray = []; var ss = SpreadsheetApp.getActiveSheet(); for (var i = 27; i < 841; i += 24) { outputArray.push("A" + i); } var protection = ss.protect(); // 获取RangeList并转换为Range数组 var unprotectedRanges = ss.getRangeList(outputArray).getRanges(); protection.setUnprotectedRanges(unprotectedRanges);
补充说明
这两种方法都能避免逐个手动指定Range对象的繁琐,本质都是确保传给setUnprotectedRanges()的是符合要求的Range对象数组,而非字符串或RangeList对象。
内容的提问来源于stack exchange,提问作者Jeffrey
相关产品推荐
相关产品推荐

