Frage

Ich habe eine Google-Tabelle, wo ich eine Liste von Fehlern zu halten und wenn ich einen Fehler beheben ich den Status ändern von „Nicht gestartet“ auf „Complete“. Ich möchte ein Skript für die Google Docs-Tabelle schreiben, so dass, wenn ich den Status ändern zu „Complete“ die gesamte Reihe wird in einer bestimmten Farbe hervorgehoben.

Ich weiß schon, dass Google Tabelle hat bereits „die Farbe wechselt auf Text“, sondern diese Funktion ändert nur die Farbe der Zelle, und nicht die Farbe der gesamten Zeile ändern.

War es hilfreich?

Lösung

//Sets the row color depending on the value in the "Status" column.
function setRowColors() {
  var range = SpreadsheetApp.getActiveSheet().getDataRange();
  var statusColumnOffset = getStatusColumnOffset();

  for (var i = range.getRow(); i < range.getLastRow(); i++) {
    rowRange = range.offset(i, 0, 1);
    status = rowRange.offset(0, statusColumnOffset).getValue();
    if (status == 'Completed') {
      rowRange.setBackgroundColor("#99CC99");
    } else if (status == 'In Progress') {
      rowRange.setBackgroundColor("#FFDD88");    
    } else if (status == 'Not Started') {
      rowRange.setBackgroundColor("#CC6666");          
    }
  }
}

//Returns the offset value of the column titled "Status"
//(eg, if the 7th column is labeled "Status", this function returns 6)
function getStatusColumnOffset() {
  lastColumn = SpreadsheetApp.getActiveSheet().getLastColumn();
  var range = SpreadsheetApp.getActiveSheet().getRange(1,1,1,lastColumn);

  for (var i = 0; i < range.getLastColumn(); i++) {
    if (range.offset(0, i, 1, 1).getValue() == "Status") {
      return i;
    } 
  }
}

Andere Tipps

Erkennen dies ist ein alter Thread, aber nach vielen Schriften wie dies bemerkte mich, zu sehen, dass Sie diese nur mit dem bedingten Formatierung tun können.

Unter der Annahme des "Status" war Spalte D

Markieren Sie die Zellen> Rechtsklick> bedingte Formatierung. Wählen Sie "Custom Formula I" und stellen Sie die Formel wie

=RegExMatch($D2,"Complete")

oder

=OR(RegExMatch($D2,"Complete"),RegExMatch($D2,"complete"))

Edit (dank Frederik Schöning)

=RegExMatch($D2,"(?i)Complete") stellen Sie dann den Bereich der Zeilen alle zum Beispiel zur Deckung A2:Z10. Dies ist Groß- und Kleinschreibung wird passen so vollständig, komplett oder vollständig ist.

Sie könnten dann andere Regeln hinzufügen, für „nicht gestartet“, etc. Der $ ist sehr wichtig. Es bezeichnet eine absolute Referenz. Ohne es Zelle A2 bei D2 aussehen würde, aber B2 bei E2 aussehen würde, so dass Sie inkonsistente Formatierung auf einer bestimmten Reihe bekommen würde.

I GENEGC Skript verwendet, aber ich fand es ziemlich langsam.

Es ist langsam, weil es ganzes Blatt scannt auf jedem bearbeiten.

So schrieb ich viel schneller und saubere Methode für mich, und ich wollte es teilen.

function onEdit(e) {
    if (e) { 
        var ss = e.source.getActiveSheet();
        var r = e.source.getActiveRange(); 

        // If you want to be specific
        // do not work in first row
        // do not work in other sheets except "MySheet"
        if (r.getRow() != 1 && ss.getName() == "MySheet") {

            // E.g. status column is 2nd (B)
            status = ss.getRange(r.getRow(), 2).getValue();

            // Specify the range with which You want to highlight
            // with some reading of API you can easily modify the range selection properties
            // (e.g. to automatically select all columns)
            rowRange = ss.getRange(r.getRow(),1,1,19);

            // This changes font color
            if (status == 'YES') {
                rowRange.setFontColor("#999999");
            } else if (status == 'N/A') {
                rowRange.setFontColor("#999999");
            // DEFAULT
            } else if (status == '') { 
                rowRange.setFontColor("#000000");
            }   
        }
    }
}

user2532030 Antwort ist die richtige und einfache Antwort.

Ich mag noch hinzufügen, dass in dem Fall, in dem der Wert der Bestimmungs Zelle nicht geeignet für ein RegEx-Spiel ist, ich folgende Syntax fand die gleiche Arbeit, nur mit numerischen Werten, Beziehungen et.c. :

[Custom formula is]
=$B$2:$B = "Complete"
Range: A2:Z1000

Wenn Spalte 2 jede Zeile (Zeile 2 in Skript, aber die führenden $ Mittel, das jede Zeile sein könnte) gleich textlich „Complete“, tut X für den Bereich des gesamten Blattes (ohne Kopfzeile (dh ab A2 statt A1)).

Aber natürlich, diese Methode ermöglicht es auch für numerische Operationen (obwohl dies nicht für op Frage gilt), wie:

=$B$2:$B > $C$2:$C

Also, Sachen, wenn der Wert der Spalte B in jeder Zeile höher als col C-Wert.

Eine letzte Sache: Wahrscheinlich ist dies nur für mich gilt, aber ich war dumm genug, um immer wieder zu wählen vergessen Benutzerdefinierte Formel in der Drop-down, so dass es in Text enthält . Offensichtlich ist dies nicht schwimmen ...

Ich denke, einfacher (wenn auch ohne Skript) unter der Annahme, die Status Spalte Spalten.

Spalten auswählen und klare Formatierung von ihm. gesamten Bereich Wählen formatiert und Format werden, Bedingte Formatierung ..., Zellen formatieren, wenn ... Custom formula is und:

=and($S1<>"",search("Complete",$S1)>0)

mit Füllung der Wahl und Fertig .

Dies ist nicht Groß- und Kleinschreibung (ändern search zu find dafür) und eine Reihe markieren, wo Columns die Gleichen von Now complete enthält (obwohl auch Not yet complete).

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top