2016-08-10 4 views
1

Ich habe ein Google Sheet-Dokument, das ich als Arbeitsplan verwende. Ich verwende derzeit das folgende Skript, um den gesamten Zeilenhintergrund zu sortieren und zu ändern, abhängig von der Nummer in Spalte "K"; Ich frage mich jedoch, wie ich die Hintergrundfarbe nur der Spalte "I" ändern kann, je nachdem, was dort eingegeben wird. Wenn ich zum Beispiel "Rot" in diese Spalte tippe, möchte ich, dass der Hintergrund nur dieser einzelnen Zelle in Rot geändert wird.Hintergrundfarbe ändern, wenn die Zelle den Namen der Farben enthält

Ich weiß, dass dies mit bedingter Formatierung leicht gemacht wird, aber ich füge ständig neue Zeilen zu diesem Blatt und verschiebe andere auf eine andere Seite, so bedingte Formatierung schnell verliert den Bereich, um es richtig anzuwenden (wenn das Sinn macht)

Vielen Dank!

function onEdit(e) { 
    if(e.range.columnStart === 11) { 
    // color the row according to the color codes and logic shown below 
    var refs = [14, "#93c47d", 15, " #00ffff", 16, "#f4c432", 17, "#ff00ff", 20, "#ffff00", ,"#ffffff"], index; 

    if(e.value >= 1 && e.value < 14) { 
     index = 0; 
    } else if(refs.indexOf(Number(e.value)) !== -1) { 
     index = refs.indexOf(Number(e.value)); 
    } else { 
     index = refs.length - 2; 
    } 

    var r = e.range.rowStart, A1 = r + ":" + r; 
    e.source.getRange(A1).setBackground(refs[index + 1]); 

    // sort the range after coloring 
    e.source.getRange("A:K").sort({column: 11}); 
    } 
} 

Antwort

0

Das erste, was ich nach der Eingabe Ihrer if tun würde, ist Ihr refs ein Objekt anstelle eines Arrays machen:

var refs = { 
green: "#93c47d", 
aqua: "#00ffff", 
orange: "#f4c432", 
magenta:"#ff00ff", 
yellow: "#ffff00" 
}; 

Dann können Sie die Farbe, die Sie erhalten auf der Grundlage der Existenz des Schlüssels in Ihrem Objekt, dh wenn Sie 'orange' eingeben, ziehen Sie den zugehörigen Farbwert # f4c432. Auf diese Weise müssen Sie sich nicht an Farbcodes erinnern.

var color; 
if(refs[e.value]){ // If this key exists, use its value 
    color = refs[e.value]; 
} else { 
    color = "#ffffff"; // Default value 
} 

Schließlich können Sie die Farbe der Zeile Einstellung durchführen:

var row = e.range.getRow(); 
e.source.getRange(row,1,1,e.source.getMaxColumns()).setBackground(color); 

Und mit Ihrer Sortieranlage beenden.

Verwandte Themen