Google Sheets自定义函数传入复合范围触发Range not found错误求助
问题根因
这是Google Sheets Apps Script 2022年底的底层API调整导致的:
- 旧版本的
sheet.getRange()方法内部会自动解析带大括号的多区间复合范围字符串(类似{C5:O11;C16:J21}),自动转换为多区域Range对象,所以你的脚本之前可以正常运行 - 新版本的
getRange()仅支持单区间的A1格式字符串、或者坐标参数,传入大括号包裹的多区间字符串时无法识别,就会抛出Range not Found异常
修复方案
你只需要修改countOnBGColor函数,先对传入的复合范围字符串做解析,拆分出每个单区间分别处理,再合并所有背景色统计结果即可,修改后的代码如下:
function countOnBGColor(sheetName, givenRange, colorref, dummyParam) { var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(sheetName); var color = sheet.getRange(colorref).getBackground(); var count = 0; // 解析复合范围字符串:先去掉首尾大括号 var rangeStr = givenRange.replace(/[{}]/g, ''); // 按分号拆分所有单区间(欧洲区域格式用分号做区间分隔,其他区域如果用逗号可替换为split(',')) var rangeSegments = rangeStr.split(';'); // 遍历每个区间分别统计 for (var s = 0; s < rangeSegments.length; s++) { var seg = rangeSegments[s].trim(); if (!seg) continue; var range = sheet.getRange(seg); var allColors = range.getBackgrounds(); for (var i = 0; i < allColors.length; i++) { for (var j = 0; j < allColors[i].length; j++) { if (allColors[i][j] == color) count += 1; } } } return count; }
修改后你不需要调整表格里的原有公式,直接替换脚本代码即可恢复正常使用。
内容的提问来源于stack exchange,提问作者Yves V.
相关产品推荐
相关产品推荐

