如何将多工作表的不同范围合并到单个变量统一设置格式?
问题分析与解决
错误原因
你代码里的bigBox根本不是有效的范围操作对象:
- 用
+拼接RangeList和Range会把对象强制转成字符串,再放进数组后,bigBox只是个装着字符串的普通数组,自然没有setBackground这类范围操作方法。 - Google Apps Script的
RangeList只能管理同一张工作表内的多个范围,跨工作表的范围没法合并成单个RangeList。
正确实现方式
把跨工作表的所有范围(不管是单个Range还是RangeList)放进一个数组,遍历数组逐个处理每个对象:
var colors = ss.getRangeByName("colorPalette").getValues(); // 直接把不同工作表的范围对象存入数组,不要用+拼接 var bigBox = [ s2.getRangeList(['a1:c4','f4:j9']), s3.getRange('b3:g9') ]; var smlBox = ss.getRangeByName("smlBox"); var theme = sheet.getRange(19,1,1,1).getValue(); Logger.log(colors[theme-1][2]); // 遍历处理所有范围 bigBox.forEach(function(item) { // 判断当前是RangeList还是单个Range if (item.getRanges) { // RangeList直接调用setBackground方法 item.setBackground(colors[theme-1][2]); } else { // 单个Range直接调用对应方法 item.setBackground(colors[theme-1][2]); } }); // 处理smlBox范围 smlBox.setBackground(colors[theme-1][1]);
另外你原来的for循环重复执行15次完全没必要,一次设置就可以完成格式修改。
内容的提问来源于stack exchange,提问作者Ismail Kimyacioglu
相关产品推荐
相关产品推荐

