尝试在 google 工作表脚本中存储 rows/cells 的范围。然后想要更改 row/cell 的颜色和格式

Trying to store a range of rows/cells in google sheets script. Want to then change color and formatting of row/cell

我正在使用脚本更改 google sheet 中行和单元格的背景颜色。现在我遍历行和单元格并执行颜色更改。这非常慢。我知道最好的做法是一次更改所有颜色。我无法找到如何将我的单元格范围存储在数组中,然后再次执行该范围的功能。

在此处的示例中,如果是奇数行或偶数行,我尝试将每隔一行设置为白色或灰色。

我创建了一个我认为可以运行的脚本,但它失败了。

function setRowColors() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheets()[0];
  var range = sheet.getDataRange();
  var oddrange=[];
  var evenrange=[];

  for (var i = range.getRow()+7; i < range.getLastRow(); i++) {
    var rowRow = i +1;
    var rowRange = range.offset(i, 0, 1);

    if (i % 2 == 0) {
      oddrange.push(rowRange);   
    } else {
      evenrange.push(rowRange);
    }         
  }

  oddrange.setBackgroundColors("#ffffff");
  evenrange.setBackgroundColors("#efefef");

  }

当我 运行 这个代码时,我得到这个错误 "Cannot find function setBackgroundColors in object "

问题:

  • 在数组而不是 Range 对象上调用 setBackgroundColors()

流量:

  • 创建一个与您要设置颜色的范围相匹配的二维颜色数组,并批量设置它们。

片段:

var lRow = sheet.getLastRow();
var headerRows = 7;
var numRows = lRow - headerRows;
var numCols = sheet.getLastColumn();
var [rows1d, cols1d] = [numRows, numCols].map(function(num){ 
    return Array.apply([],new Array(num)); //or just `getBackgrounds()` to get a 2d array 
})
var colors2d = rows1d.map(function(row, i){
    var color = i%2 === 0 ? "#ffffff" : "#efefef";
    return cols1d.map(function(col){
        return color;
    })
})
sheet.getRange(headerRows + 1, 1, numRows, numCols).setBackgrounds(colors2d);

参考文献:

除了另一个答案之外,我想提请您注意,您可以通过首先 select 所有单元格(单击 space 之间的 space 在电子表格中创建交替行行索引和列索引)(也适用于任何范围的单元格)然后转到 Format > Alternating Colors 它将调出一个菜单,您可以 select 使用您想要的颜色。