2013-08-30 124 views
-1

我试图在同一时间设置一个颜色块。设置颜色RGB

我可以用setBackgrounds的范围,首先给每个细胞,像这样

Multiple column conditional formatting

颜色的名称做这一切在一次,但我想等混纺的颜色和RGB功能setBackgroundRGB但范围。可以做到吗?还是必须循环并单独设置?

setBackground有一个范围setBackgrounds。有没有相当于setBackgroundRGB的东西?

我在这里没有看到它的参考。 https://developers.google.com/apps-script/reference/spreadsheet/range。想知道是否有人有一个解决方案,只是循环通过一切。

+0

为什么你不能使用setBackgrounds和使用颜色代码,而不是名字。 '#FF0000'而不是'红色' – Srik

+0

我需要这种颜色'RGB(207,226,243)'。你能用一个代码表达吗? – jason

回答

1

使用rgbToHex()功能在这个答案提供:RGB to Hex and 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 
+0

此选项的一个优点是它是一个单一的API调用。 – wchiquito

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 */