在Google Sheets中使用列表宏

问题描述 投票:1回答:1

我有一个列表,我想把元素添加到列表中,同时在嵌套的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);

这将是我想的方法,但是IDE中的... Recorded Macros 似乎没有一个插入或等价的方法来应用于列表对象。对这个问题有什么想法吗?

google-apps-script google-sheets nested-lists
1个回答
2
投票
  • 如果你登录 range.getBackgrounds()你会看到它返回一个二维数组,形式为 [[#ffffff, #ffffff], [#ffffff, #ffffff]] - 而不是列表!

  • 要将新的值分配给 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");
}
© www.soinside.com 2019 - 2024. All rights reserved.