Google Sheets脚本sumCellsByColor无法接受范围值问题
解决Google Sheets自定义函数sumCellsByColor的范围解析问题
原代码的核心问题在于:sheet.getRange(getstr)仅能处理当前活动工作表内的纯范围字符串(如"B2:B32"),无法识别带工作表名称的范围格式(如"sheet1!B2:B32")。此外,当前实现也不支持直接传入Range对象(用户需手动给范围加引号,体验不佳)。
修复后的代码
function sumCellsByColor(color, rangeInput) { var ss = SpreadsheetApp.getActiveSpreadsheet(); var range; // 处理两种输入类型:Range对象或范围字符串 if (typeof rangeInput === 'string') { range = ss.getRange(rangeInput); } else if (rangeInput instanceof Range) { range = rangeInput; } else { throw new Error("第二个参数必须是范围字符串或单元格区域"); } var bgColors = range.getBackgrounds(); var values = range.getValues(); var sum = 0; for (var row = 0; row < bgColors.length; row++) { for (var col = 0; col < bgColors[row].length; col++) { if (bgColors[row][col] === color) { var cellValue = values[row][col]; if (typeof cellValue === 'number') { sum += cellValue; } } } } return sum; }
关键修改说明
- 替换范围获取方式:改用
ss.getRange(rangeInput),该方法支持两种范围格式:- 不带工作表名:如"B2:B32"(默认使用当前活动表)
- 带工作表名:如"sheet1!B2:B32"(自动定位到指定工作表)
- 兼容多类型参数:新增对Range对象的支持,用户可直接输入
=sumCellsByColor("#ff6d01", B2:B32)(无需给范围加引号),使用更便捷。 - 错误处理:添加参数类型校验,避免无效输入导致的静默失败。
使用示例
- 对当前表B2:B32区域中背景色为#ff6d01的单元格求和:
=sumCellsByColor("#ff6d01", B2:B32) - 对sheet1表B2:B32区域中背景色为#ff6d01的单元格求和:
=sumCellsByColor("#ff6d01", "sheet1!B2:B32")
内容的提问来源于stack exchange,提问作者Ared Design
相关产品推荐
相关产品推荐

