2009-06-05 17 views
36

Ich bin auf der Suche nach einer Möglichkeit, die Farbe der minimalen Zelle in einer Zeile in Google Docs-Tabelle automatisch zu ändern.Google Spreadsheet Automatische Färbung

Also, für eine Tabelle wie

1 | 2 | 3 
4 | 2 | 1 
2 | 1 | 6 

Es wäre in ihnen alle Zellen mit '1' färben.

+0

Nicht unbedingt Programmierung im Zusammenhang .. – JasonV

+2

Bedingte Formatierung, auch wenn dies über eine Benutzeroberfläche erfolgt ist mit der Programmierung verbunden, da es ein Problem zu analysieren benötigt, um einen Satz von Regeln auf solche Weise zu definieren, dass ein Computer tun könnte Aufgabe. In Anbetracht dessen denke ich, dass diese Frage neu eröffnet werden sollte. –

+0

Wählen Sie alle Zellen aus und wenden Sie eine benutzerdefinierte Formel an: '= und (nicht (iblank (A1)) A1 = min (1: 1)' – pnuts

Antwort

57

Im Drop-Down-Menü Format-> Bedingte Formatierung ...

setzen Sie dann Ihre Regeln und Ihre Farbe. Sie können mehrere Zellen auswählen und dies auch tun.

Edit:

Das ist das Ausmaß dessen, was Sie mit Färbung zu tun. Sie können vielleicht eine komplexe Formel finden, um das Minimum der Zellen zu finden, und dann, wenn das mit dem übereinstimmt, was in der Zelle ist, dann färben Sie es, aber Sie könnten Excel anstelle von Google Docs verwenden, wenn dies eine kritische Sache für Sie ist.

+1

Wenn Sie nicht erreichen können, was Sie benötigen, können Sie bedingte Formatierung verwenden der Skript-Editor, um das onEdit-Ereignis zu ändern, um die Zelle zu überprüfen und die Färbung abhängig von jeder Bedingung zu ändern, die Sie sich vorstellen können. Keine Notwendigkeit (oder Verwendung) für Excel. –

+0

Das hat sich seit 2015 geändert, aber es hat mir geholfen, was ich brauchte! Sie können nun auf 'Format' ->' Bedingte Formatierung ... '->' Farbskala' klicken. – PubNub

+0

@Kekoa Cool, danke für das Update. –

26

Der Trick ist, in das onEdit Ereignisauslöser erschließen und einige Intelligenz

Auf den ersten Blick dachte ich, die bedingte Formatierung funktionieren würde hinzufügen, aber das Minimum pro Zeile ist ein wenig zu komplex für die Standard-bedingte Formatierung . Es ist ein wenig schwierig, herauszufinden, aber es kann getan werden.

Hier ist das vollständige Skript (getestet und funktioniert):

function onEdit() { 
    var s = SpreadsheetApp.getActiveSheet(); 
    var r = s.getActiveRange(); 
    var row = r.getRow(); 
    var cols = s.getDataRange().getNumColumns(); 

    // crate a range for the row using getRange(row, column, numRows, numColumns) 
    var rowRange = s.getRange(row, 1, 1, cols); 
    var rowValues = rowRange.getValues(); 

    // check all the values in the row 
    var val = 999; 
    for(var i = 0; i < cols; i++) { 
    if(val > rowValues[0][i] && rowValues[0][i] !== "") { 
     val = rowValues[0][i]; 
    } 
    } 
    for(var j = 0; j < cols; j++) { 
    if(rowValues[0][j] === val) { 
     s.getRange(row,(j + 1)).setFontColor("blue"); 
    } else { 
     s.getRange(row,(j + 1)).setFontColor("black"); 
    } 
    } 
} 

Zuerst Sie tippen in das onEdit Ereignishandler das Skript mit den Tabellenkalkulationsänderungen auszulösen.

Durch die Benennung einer Funktion onEdit wird automatisch erkannt, dass Sie die onEdit-Aktion überschreiben möchten.

Hinweis: Event-Handler in Google Docs sind jedoch ein wenig schwierig. Da die Dokumentation mehrere gleichzeitige Bearbeitungen durch mehrere Benutzer verarbeiten kann, werden die Ereignishandler serverseitig behandelt. Das Hauptproblem bei dieser Struktur besteht darin, dass beim Fehlschlagen eines Ereignisauslösers auf dem Server ein Fehler auftritt. Wenn Sie die Debug-Informationen anzeigen möchten, müssen Sie im Trigger-Menü einen expliziten Trigger einrichten, mit dem Sie die Debug-Informationen per E-Mail erhalten, wenn das Ereignis fehlschlägt, andernfalls wird es im Hintergrund fehlschlagen.

die Zeilennummer holen:

var r = s.getActiveRange(); 
    var row = r.getRow(); 

Recht selbst hier erklärend. Der aktive Bereich ist die Zelle, die bearbeitet wird.

Ergreifen Sie die Anzahl der Spalten:

var cols = s.getDataRange().getNumColumns(); 

Sie müssen den Datenbereich für die gesamte Tabelle für diese überprüfen.

Als nächstes müssen Sie einen Datenbereich konstruieren, um die Daten für die Reihe in Frage enthält:

var rowRange = s.getRange(row, 1, 1, cols); 

Lesen Sie die Kommentare in den Code zu sehen, was die Werte sein sollten.

Dann haben wir die Ergebnisse für die Prüfung der Werte zwischenzuspeichern:

var rowRange = s.getRange(row, 1, 1, cols); 

Aufgrund der Art von Google Text & Tabellen-Scripting-Ereignisrückrufe laufen serverseitige so, Missbrauch zu verhindern, setzt Google ein Zeitlimit für die Ausführung des Skripts. Durch das Zwischenspeichern der Werte können Sie verhindern, dass der Server viele unnötige Rundreisen unternimmt, um die Werte aus der Tabelle abzurufen.

Die nächsten zwei Teile sind, wo all die Magie passiert.

Zuerst durchlaufen wir alle Zellen der Zeile, um den Mindestwert zu finden.

var val = 999; 
    for(var i = 0; i < cols; i++) { 
    if(val > rowValues[0][i] && rowValues[0][i] !== "") { 
     val = rowValues[0][i]; 
    } 
    } 

stelle ich eine Standard-Obergrenze für die aus Gründen der Einfachheit von 999. This could be change to a more appropriate value. Der Trick besteht darin, den Wert gegenüber dem aktuellen Tief zu testen. Wenn es niedriger ist, dann markieren Sie den neuen niedrigen Wert.

Sie könnten einfach aussteigen, indem Sie die Zellennummer mit dem niedrigsten Wert markieren und explizit einstellen, aber ich wollte Fälle abdecken, bei denen mehrere Zellen den niedrigsten Wert haben.

mehrere Zellen enthält, die minimale Handhabung erfordert einen zweiten Durchlauf:

for(var j = 0; j < cols; j++) { 
    if(rowValues[0][j] === val) { 
    s.getRange(row,(j + 1)).setFontColor("blue"); 
    } else { 
    s.getRange(row,(j + 1)).setFontColor("black"); 
    } 
} 

Die Schleife durch alle Zellen in der Zeile bleibt gleich. Diesmal überprüfen wir nur, ob die Zellenwerte dem gewählten Minimum entsprechen. Wenn es übereinstimmt, ändert sich die Schriftfarbe in blau. Andernfalls wird die Schriftfarbe in Schwarz geändert.


Das etwa fasst es zusammen. Es ist ein wenig schwierig, sich daran zu gewöhnen, dass Google Apps Scripting Tabellen und Datenzellen referenziert, aber Docs kann nicht viel tun.

Ich habe eine public link in die Tabelle, die ich verwendet habe, um diesen Code zu schreiben/zu testen. Fühlen Sie sich frei, es auszuprobieren.

Verwandte Themen