在一系列单元格上一次设置颜色

时间:2017-08-21 11:46:48

标签: google-sheets

逐个设置单元格的颜色非常慢。建议通过为该范围分配一个数组来做到这一点。我读到了这一点,经常提到以下样本。但是,我无法让它工作,所以它对我没有帮助。

var cell = sheet.getRange('a1');
var colors = new Array(100);
for (var y = 0; y < 100; y++) {
  xcoord = xmin;
  colors[y] = new Array(100);
  for (var x = 0; x < 100; x++) {
    colors[y][x] = getColorFromCoordinates(xcoord, ycoord);
    xcoord += xincrement;
  }
  ycoord -= yincrement;
}
sheet.getRange(1, 1, 100, 100).setBackgroundColors(colors);

我的代码如下,以消息结束(错误):无法将数组转换为对象[[]],指向最后一行。

function TabelMarkeren() {
  var selection = SpreadsheetApp.getActiveSpreadsheet().getRangeByName("Proef") // 6 by 3;
  var colors = [];

  for (var row = 1; row <= selection.getNumRows(); ++row) {
    var cell = selection.getCell(row, 1);
    if (cell.isBlank()) {
  colors[row, 1] = "#86d8b6";
}// if
else {
  colors[row, 1] = "c4c4a4";
  }// else
  colors[row, 2] = "blue";
  colors[row, 3] = "green";
}// for
SpreadsheetApp.getActiveSpreadsheet().
getRangeByName("Proef").setBackgrounds(colors);
}

当我使用Browser.msgBox时。 。向我展示数组中的一些值。没关系。但显然setBackgroundColors想要一个对象而不是一个数组。

2 个答案:

答案 0 :(得分:2)

setBackgrounds期望[] []中的值,并且您正在传递[]中的值。请参阅以下代码。

function TabelMarkeren() {
    var selection = SpreadsheetApp.getActiveSpreadsheet().getRangeByName("Proef") // 6 by 3;
    var finalColors = [];
    for (var row = 1; row <= selection.getNumRows(); ++row) {
        var colors = [];
        var cell = selection.getCell(row, 1);
        if (cell.isBlank()) {
            colors[row, 1] = "#86d8b6";
        } // if
        else {
            colors[row, 1] = "c4c4a4";
        } // else
        colors[row, 2] = "blue";
        colors[row, 3] = "green";
        finalColors.push(colors)
    } // for
    Logger.log(colors)
    SpreadsheetApp.getActiveSpreadsheet().getRangeByName("Proef").setBackgrounds(finalColors);
}

答案 1 :(得分:0)

谢谢Ritz,我现在就开始工作了。 我还必须将colomn索引从1,2,3更改为0,1,2。那是另一个错误。代码现在是:

function TabelMarkerenn() {
  var selection = SpreadsheetApp.getActiveSpreadsheet().getRangeByName("Proef");
  var finalColors = []

  for (var row = 1; row <= selection.getNumRows(); ++row) {

    var colors = [];
    var cell = selection.getCell(row, 1);
    if (cell.isBlank()) {
      colors[row, 0] = "#86d8b6";
    }// if
    else {
      colors[row, 0] = "#c4c4a4";
    }// else
    colors[row, 1] = "blue";
    colors[row, 2] = "green";
    finalColors.push(colors);
  }// for
  Logger.log(finalColors);

SpreadsheetApp.getActiveSpreadsheet().
getRangeByName("Proef").setBackgrounds(finalColors);
}

对此非常满意,但是。 。 。有没有办法直接使用finalColors数组?或者是那种较慢或者不常见的做法。