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

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.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 22:06:03