-1

我正在尝试同时设置一块颜色。

我可以使用setBackgrounds一个范围并通过首先给每个单元格一个颜色名称来一次完成所有操作

多列条件格式

但我想要其他混合颜色和 RGB 功能setBackgroundRGB,但需要一个范围。可以做到吗?还是我必须循环并单独设置?

setBackgroundsetBackgrounds一个范围。有什么等价的setBackgroundRGB吗?

我在参考文献中没有看到它。https://developers.google.com/apps-script/reference/spreadsheet/range。想知道除了遍历所有内容之外是否有人有解决方案。

4

2 回答 2

2

一种选择是创建自己的函数(一种包装器),例如(您需要应用必要的验证):

/* CODE FOR DEMONSTRATION PURPOSES */
function setColorToRange() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getActiveSheet();
  var colorsRGB = [
    [
      [255, 0, 0],
      [0, 255, 0],
      [0, 0, 255],
      [0, 0, 0]
    ],
    [
      [0, 0, 0],
      [0, 0, 255],
      [0, 255, 0],
      [255, 0, 0]
    ],
    [
      [0, 255, 0],
      [0, 255, 0],
      [0, 255, 0],
      [0, 255, 0]
    ]
  ];
  var cell = sheet.getRange("B5:E7");

  setBackgroundsRGB(cell, colorsRGB);
}

function setBackgroundsRGB(range, colors) {
  var row = range.getRow(), lastRow = range.getLastRow();
  var initColumn = range.getColumn(), lastColumn = range.getLastColumn(), column;
  var ss = range.getSheet(), colorRow, colorColumn, subRange;
  for (colorRow = 0; row <= lastRow; ++row, ++colorRow) {
    for (column = initColumn, colorColumn = 0; column <= lastColumn; ++column) {
      subRange = ss.getRange(row, column);
      subRange.setBackgroundRGB.apply(subRange, colors[colorRow][colorColumn++]);
    }
  }
}
/* CODE FOR DEMONSTRATION PURPOSES */
于 2013-08-30T11:00:49.757 回答
1

使用rgbToHex()此答案中提供的功能:RGB to Hex 和 Hex to RGB

function rainbow() {
  var back = [];
  for (var row=0; row <16; row++) {
    back[row]=[];
    for (var col=0; col <16; col++) {
      back[row][col] = rgbToHex(row*16,col*16,Math.round(row+col/2)*16);
    }
  }
  debugger;
  SpreadsheetApp.getActiveSheet()
                .getRange(1, 1, back.length, back[0].length)
                .setValues(back)
                .setBackgrounds(back)
}

脚注:

rgbToHex(207,226,243) == #cfe2f3
于 2013-08-30T11:37:55.193 回答