我正在尝试在App Script中编写一个为特定列表分配新颜色的功能(仅客户端表A列)。
第一个是clientlist数组取决于客户端表A列(第2行直到lastrow) 2nd是一个bgcolor数组,列出1到3的hexcolor 3rd是一个fncolor数组,列出1到3的十六进制
我需要的是扫描每个客户列表并从bgcolor和fncolor中提供相应的颜色,如果满足最大bgcolor和fncolor但客户列表中仍有值,则数组将返回启动并重新开始。我有这个现有的代码,我失去了如何给它颜色,但我想我只是遗漏了一些东西。
我希望有人能解决我的问题。感谢。
function newAssignColor() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var clientLists = ss.getSheetByName('Clients');
var bgcolors = [['#000000'], ['#000033'], ['#000066']];
var fncolors = [['#ffffff'], ['#ffffff'], ['#ffffff']];
var r = clientLists.getRange(1, 1, clientLists.getLastRow(),1);
var data = r.getValues();
for (var i=1; i<=data.length; i++) {
if (i-1 <= bgcolors.length) {
var j = i-1;
i = j;
}
else { var j = 0; i =j;}
if (data[i][0] !== "") {
clientLists.getRange(i,1,1,1).setBackground(bgcolors[j][0]);
clientLists.getRange(i,1,1,1).setFontColor(fncolors[j][0]);
}}
}
答案 0 :(得分:1)
当我们迭代数据数组时,我们可以使用索引并使用%运算符获取背景颜色,因此一旦我们耗尽了颜色数组,我们就从第一个开始。再次。这是代码段。
function newAssignColor() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var clientLists = ss.getSheetByName('Clients');
var bgcolors = ['#000000', '#000033', '#000066'];
var fncolors = ['#ffffff', '#fffff0', '#fffff1'];
var r = clientLists.getRange(1, 1, clientLists.getLastRow(),1);
var data = r.getValues();
for (var i=0; i<data.length; i++) {
Logger.log("Data Value " + i + " : " + data[i]);
var totalBgColors = bgcolors.length;
var totalFgColors = fncolors.length;
var bgColor = bgcolors[i%totalBgColors];
var fgColor = fncolors[i%totalFgColors];
Logger.log("BG Color: " + bgColor);
Logger.log("FG Color: " + fgColor);
}
}
这是输出
答案 1 :(得分:1)
最终代码在这里归功于给定的代码:
为从第2行开始的列表中的每个项目指定新颜色。当达到最大颜色时,重复到数组的第一个颜色。
function newAssignColor() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var clientLists = ss.getSheetByName('Clients');
var bgcolors = [['#000000'], ['#000033'], ['#000066']];
var fgColors = [['#ffffff'], ['#ffffff'], ['#ffffff']];
var r = clientLists.getRange(1, 1, clientLists.getLastRow(),1);
var data = r.getValues();
for (var i=2; i<=data.length; i++) {
var totalBgColors = bgcolors.length;
var totalFgColors = fgColors.length;
var bgColor = bgcolors[i%totalBgColors];
var fgColor = fgColors[i%totalFgColors];
if (data[i] !== "") {
clientLists.getRange(i,1,1,1).setBackground(bgColor);
clientLists.getRange(i,1,1,1).setFontColor(fgColor);
}}
}