Arkusz kalkulacyjny Google: skrypt do zmiany koloru wiersza, gdy komórka zmienia tekst;

Mam googlespreadsheet, w którym przechowuję listę błędów i za każdym razem, gdy naprawiam błąd, zmieniam status z "nie rozpoczęty"na " ukończony". Chcę napisać skrypt dla arkusza kalkulacyjnego Google Docs tak, że za każdym razem, gdy zmienię status na "Ukończ" cały wiersz zostanie podświetlony w określonym kolorze.

Wiem już, że arkusz kalkulacyjny Google ma już "Zmień kolor na tekst" , ale ta funkcja zmienia tylko kolor komórki i nie zmienia koloru całego wiersza.

Author: pnuts, 2010-09-13

5 answers

//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;
    } 
  }
}
 53
Author: genegc,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-10-05 01:32:55

Uświadomić sobie, że to stary wątek, ale po obejrzeniu wielu skryptów takich jak ten zauważyłem, że można to zrobić tylko za pomocą formatowania warunkowego.

Zakładając, że" Status " to kolumna D:

Podświetl komórki > kliknij prawym przyciskiem myszy > formatowanie warunkowe. Wybierz "Custom Formula Is" I ustaw formułę jako

=RegExMatch($D2,"Complete")

Lub

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

Edit (thanks to Frederik Schøning)

=RegExMatch($D2,"(?i)Complete") Następnie Ustaw zakres tak, aby obejmował wszystkie wiersze, np. A2:Z10. Wielkość liter jest niewrażliwa, więc dopasuje się do kompletności, kompletności lub kompletności.

Możesz następnie dodać inne reguły dla "nie uruchamiane" itp. $ Jest bardzo ważne. Oznacza absolutne odniesienie. Bez niego komórka A2 patrzyłaby na D2, ale B2 patrzyłaby na E2, więc uzyskałbyś niespójne formatowanie w dowolnym wierszu.

 40
Author: user2532030,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-03-11 14:16:57

Użyłem skryptu GENEGC, ale znalazłem go dość wolno.

Jest powolny, ponieważ skanuje cały arkusz przy każdej edycji.

Więc napisałem o wiele szybszą i czystszą metodę dla siebie i chciałem się nią podzielić.

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");
            }   
        }
    }
}
 27
Author: BlackTea,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-12-05 20:26:08

Odpowiedź użytkownika User2532030 jest prawidłowa i najprostsza.

Chcę tylko dodać, że w przypadku, gdy wartość wyznaczającej komórki nie jest odpowiednia do dopasowania RegEx, znalazłem następującą składnię, która działa tak samo, tylko z wartościami liczbowymi, relations et.c.:

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

Jeśli kolumna 2 dowolnego wiersza (wiersz 2 w skrypcie, ale początek $ oznacza, że może to być dowolny wiersz) tekstowo równa się "Complete", wykonaj X dla zakresu całego arkusza (z wyłączeniem wiersza nagłówka (tj. od A2 zamiast A1)).

Ale oczywiście metoda ta pozwala również na operacje numeryczne (choć nie dotyczy to pytania op), takie jak:

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

Więc zrób coś, jeśli wartość col B w dowolnym wierszu jest wyższa niż col C.

Ostatnia rzecz: Najprawdopodobniej dotyczy to tylko mnie, ale byłem na tyle głupi, że wielokrotnie zapominałem wybrać niestandardową formułę w rozwijanym menu, pozostawiając ją w Tekst zawiera. Oczywiście, to nie będzie / align = "left" / ..

 6
Author: Frederik Struck-Schøning,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-11-12 09:06:56

Myślę, że prostsze (choć bez skryptu) zakładając, że Status kolumna to kolumny.

Wybierz kolumny i wyczyść z nich formatowanie. Wybierz cały zakres do sformatowania i formatowanie, Formatowanie warunkowe..., Formatuj komórki jeśli... Custom formula is i:

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

Z wypełnieniem do wyboru i zrobione.

Nie uwzględnia wielkości liter (w tym celu należy zmienić search na find) i podświetli wiersz, w którym kolumny zawierają np. Now complete (choć również Not yet complete).

 2
Author: pnuts,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-06-05 23:14:21