我有一个列表,我想在其中添加元素,同时循环使用嵌套的 for 循环进行单元格索引/引用。但是,似乎没有一种方法可以用来将元素插入列表中。请参阅示例:
var colors = range.getBackgrounds();
for (var i = 0; i < rangeHeight; i++)
for (var j = 0; j < rangeWidth; j++)
colors.add("#somecolorhash");
range.setBackgrounds(colors);
这就是我想做的方式,但是Recorded Macros
中的 IDE 似乎没有插入或等效的方法应用于列表对象。对此有什么想法吗?
-
如果您登录
range.getBackgrounds()
,您将看到它返回一个形式为[[#ffffff, #ffffff], [#ffffff, #ffffff]]
的 2D 数组 - 而不是列表! -
要为
colors
赋值,您需要按索引colors[i][j]
对单个条目进行寻址。 -
请注意,为了
setBackgrounds
颜色范围,colors
需要具有与您的范围相同的尺寸 - 因此,在示例中,您需要替换颜色而不是添加新值(否则
colors
范围对于工作表范围来说会变得太大。
示例 1:
function myFunction() {
var range = SpreadsheetApp.getActiveSheet().getRange("A1:B2");
var colors = range.getBackgrounds();
Logger.log(colors);
var rangeHeight = colors.length;
var rangeWidth = colors[0].length;
for (var i = 0; i < rangeHeight; i++){
for (var j = 0; j < rangeWidth; j++){
colors[i][j]="#000000";
}
}
range.setBackgrounds(colors);
}
- 请注意,在循环中使用
{...}
很重要for
否则只有第一个后续行将被视为循环的一部分。 - 如果要为整个范围指定相同的颜色,可以使用
setBackground()
而不是setBackgrounds()
。
示例 2:
function myFunction2() {
var range = SpreadsheetApp.getActiveSheet().getRange("A1:B2");
range.setBackground("#00ff00");
}