2017-06-28 1 views
0

Ich versuche, in App Script eine Funktion, die eine neue Farbe für eine bestimmte Liste zuweisen würde (nur Clients Spalte A) zuordnen.Wiederholen Sie die Verwendung von Array, wenn die maximale Reichweite ist

1. ist die clientlist Array auf dem clientsheet Spalte A (Zeile 2, bis LastRow) hängt 2. ist ein bgcolor Array, das eine hexcolor von 1 bis 3 3. ist ein fncolor Array-Liste, die eine hexcolor von 1 bis 3

Liste

Was ich brauche, ist jede Clientliste zu scannen und eine entsprechende Farbe aus der bgcolor und fncolor, wenn die maximale bgcolor und fncolor erfüllt ist, aber es noch Werte in clientlist gibt, wird das Array zurück zu starten und von vorne beginnen. Ich habe diesen bestehenden Code, den ich verloren habe, wie würde es Farbe geben, aber ich denke, dass ich gerade etwas vermisse.

Ich hoffe, dass jemand mein Problem lösen könnte. Vielen Dank.

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]); 
    }} 
} 

Antwort

1

Während wir die Daten-Array durchlaufen, können wir dann die Hintergrundfarbe erhalten den Index und den Operator% verwendet wird, so dass, sobald wir die Farbe Array erschöpfen, beginnen wir von der ersten. nochmal. Hier ist das Code-Snippet. Hier

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

    } 
} 

ist der Ausgang

enter image description here

+0

danke das funktioniert! Ich muss nur ein kleines bisschen reparieren, aber es hat wirklich geholfen .. danke Manish! – SBBmaster09

+0

Sie sind immer willkommen @ SBBmaster09 – manish

1

finale Code hier Credits gegebenen Code manish:

Zuweisen neuer Farben für die einzelnen Elemente in der Liste, beginnend in Zeile 2. wenn maximale Farb erreicht ist, wiederhole die erste Farbe des Arrays.

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); 
    }} 
} 
Verwandte Themen