Question

J'ai une feuille de calcul Google où je garde une liste des bugs et chaque fois que je corrigeons un bug que je change le statut de « Non commencé » à « complet ». Je veux écrire un script pour la feuille de calcul Google Docs tels que chaque fois que je change l'état « Complete » la ligne entière est mise en surbrillance dans une certaine couleur.

Je sais déjà que feuille de calcul Google a déjà « changement de couleur sur le texte », mais cette fonction ne change que la couleur de la cellule et ne change pas la couleur de la ligne entière.

Était-ce utile?

La solution

//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;
    } 
  }
}

Autres conseils

Réaliser c'est un vieux fil, mais après avoir vu beaucoup de scripts comme cela, je remarqué que vous pouvez le faire simplement en utilisant le formatage conditionnel.

En supposant que la colonne était D "Status":

Sélectionnez les cellules> clic droit> Mise en forme conditionnelle. Sélectionnez « formule personnalisée est » et définir la formule

=RegExMatch($D2,"Complete")

ou

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

Edit (grâce à Frederik Schöning)

=RegExMatch($D2,"(?i)Complete") puis définir la plage à couvrir toutes les lignes par exemple, A2:Z10. Ceci est insensible à la casse, donc correspondront complète, complète ou complète.

Vous pouvez ensuite ajouter d'autres règles pour « Non commencé », etc. Le $ est très important. Il représente une référence absolue. Sans elle cellule A2 regarderait D2, mais B2 regarderait E2, de sorte que vous obtiendriez manque d'uniformité sur une ligne donnée.

J'ai utilisé le script de GENEGC, mais je l'ai trouvé assez lent.

Il est lent, car il balaye la feuille tout sur chaque édition.

Alors je l'ai écrit plus rapide et plus propre méthode pour moi et je voulais partager.

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

La réponse de user2532030 est la bonne réponse et la plus simple.

Je veux juste ajouter que dans le cas où la valeur de la cellule détermination ne convient pas à un RegEx match, j'ai trouvé la syntaxe suivante pour travailler les mêmes, que des valeurs numériques, les relations et.c. :

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

Si la colonne 2 de toute la ligne (ligne 2 dans le script, mais les principaux moyens $, cela pourrait être une ligne) est égale à textuellement « Complete », faire X pour la plage de la feuille entière (à l'exception de la ligne d'en-tête (c.-à partir de A2 au lieu de A1)).

Mais évidemment, cette méthode permet également des opérations numériques (même si cela ne vaut pas pour la question de l'op), comme:

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

Alors, faire des choses, si la valeur du col B dans une ligne est supérieure à la valeur col C.

Une dernière chose: Très probablement, cela ne vaut que pour moi, mais je suis assez stupide pour oublier à plusieurs reprises pour choisir formule personnalisée est dans le menu déroulant, laissant à Texte contient . De toute évidence, cela ne flotte pas ...

Je pense plus simple (mais sans script) en supposant que la colonne Status est Columns.

Sélectionnez Columns et la mise en forme claire de celui-ci. Sélectionnez gamme à formater et Format, Mise en forme conditionnelle ..., Format de cellule si ... Custom formula is et:

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

avec plein de choix et Fait .

Ce n'est pas sensible à la casse (changement search à find pour cela) et mettra en évidence une ligne où COLONNES contient les goûts de Now complete (mais aussi Not yet complete).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top