如果达到最大值,则重复使用数组

时间:2017-06-28 04:36:32

标签: javascript google-apps-script google-sheets

我正在尝试在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]);
  }} 
}

2 个答案:

答案 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);

  } 
}

这是输出

enter image description here

答案 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);
  }} 
}