【问题标题】:Change format of a range of columns rather than one at a time更改一系列列的格式,而不是一次更改一个
【发布时间】:2021-04-17 08:59:04
【问题描述】:

我有一个函数,它采用单元格的格式并将其应用于另一个单元格。我使用的代码是:

var backColor1 = sheet.getRange("Config!C30");
var cbgColors = backColor1.getBackgrounds();
bRange2.setBackgrounds(cbgColors);

bRange2 设置为我也想应用背景颜色的单元格。这行得通,但我正在使用循环制作数百个单元格,并且要实现这一点,每个单元格都是单独绘制的,这需要时间。

有没有办法将背景颜色应用于一系列单元格?即使是同时多行或多列也会比我目前的做法更有效率。

【问题讨论】:

    标签: google-apps-script google-sheets


    【解决方案1】:

    试试这个模式:

      const ss = SpreadsheetApp.getActive();
      const newColor = ss.getRange('Config!C30').getBackground();
      const rangesA1 = ['Data1!A1:A', 'Data1!D4:F42', 'Data2!A1:ZZ'];
      rangesA1.map(rangeA1 => ss.getRange(rangeA1))
        .forEach(range => {
          const colors = range.getValues().map(row => row.map(cell => newColor));
          range.setBackgrounds(colors);
        });
    

    【讨论】:

    • 我创建了一张空白表并将其添加到函数中,但它似乎不起作用?
    • 您的测试电子表格是否包含名为“Config”、“Data1”和“Data2”的工作表?如果没有,请添加它们,或修改代码以引用您实际使用的工作表名称。
    • 我没有意识到那些是引用标签。我现在已经添加了它们。我收到以下错误:异常:参数(字符串)与 SpreadsheetApp.Range.setBackgrounds 的方法签名不匹配。
    • 修复了创建 2D 颜色数组的代码 — Range.setBackgrounds() 似乎不像 Range.setValues() 那样自动扩展标量。
    【解决方案2】:

    您可以使用getBackground 代替getBackgrounds(没有最后的“s”)

    每个函数有两种变体。

    • getBackground & getBackgrounds
    • setBackground & setBackgrounds

    请查阅文档中的详细信息:https://developers.google.com/apps-script/reference/spreadsheet/range.html

    简而言之,对于“singluar”版本,get 将返回一个字符串值,例如 #ffff00,而set 也将采用单个字符串。

    对于plural 版本,get 将返回字符串值的二维数组,即:

    [
    [#ffff00, #ffffff, #ffffff],
    [#ffffff, #ffffff, #ffffff],
    [#ffffff, #ffffff, #ffffff],
    [#ffffff, #ffffff, #ffffff],
    [#ffffff, #ffffff, #00ff00],
    [#ffffff, #ffffff, #ffffff]
    ]
    

    这个例子代表三列六行的范围。对于set 方法的复数版本,setBackgrounds 您调用它的范围需要完全匹配二维数组的大小。因此,对于上面的示例,A1:C6 将是一个有效范围。这为您提供了更多控制权,以防您想用各种颜色为整个范围着色,但只需使用一个命令即可。

    而使用单一版本setBackground,您可以选择一个大范围,然后将其传递给一个字符串值,它会将整个范围设置为该颜色。

    您的示例可能如下所示:

    var backColor1 = sheet.getRange("Config!C30");
    var cbgColors = backColor1.getBackground();
    var bRange2 = sheet.getRange("A1:Z10")
    bRange2.setBackground(cbgColors);
    

    参考

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-31
      • 2015-06-29
      相关资源
      最近更新 更多