web-dev-qa-db-fra.com

Formater conditionnellement les bordures de lignes

J'aimerais que chaque ligne soit entourée d'une bordure supérieure de couleur noir moyen dont la cellule A de la colonne contient du texte dans une feuille de calcul Google.

J'aimerais également avoir la même bordure supérieure sur chaque ligne dont la ligne entière est vide.

Je comprends que la mise en forme conditionnelle n'inclut pas la mise en forme des bordures comme dans Excel, et que je ne suis pas encore familiarisé avec les scripts dans cette application Web.

Est-ce que quelqu'un pourrait expliquer le processus pour générer ceci s'il vous plaît?

2
etudes

Le processus qui générerait un script rendant la mise en forme conditionnelle mentionnée mentionnée comprend bien entendu ce que vous avez mentionné et que vous ne connaissez pas: les scripts.

A) Apprenez les bases du script Google Apps lié aux feuilles Google. Ceci est juste une petite partie du script des applications et c'est bon point de départ . La plupart des bases peuvent être apprises en essayant de construire votre script de formatage, mais vous devez avoir envie d'apprendre les scripts.

B) Dans le document de feuilles, ouvrez l'éditeur de script et définissez la fonction suivante:

function onEdit(event) {
  var sheet = SpreadsheetApp.getActiveSheet();
  var range = event.range;
  var adress= range.getA1Notation();
  Logger.log("change cell %s", adress);
  sheet.getRange('F2').setValue(adress);
}

C) Installez un déclencheur sur votre feuille de calcul qui déclenche notre fonction 'onEdit' lorsque la feuille est modifiée. Voir le HOWTO officiel . Vérifiez que ce déclencheur simple et ce code fonctionnent. Assurez-vous également de bien comprendre ce que le code exprime.

D) Écris le code correspondant à la logique:

FOR EACH ROW in event.range() {
  IF( your condition for formatting) THEN 
    var myRange= sheet.getRange(rownr, 1,1,nbrOfColumns)
    myRange.setBorder();
  ENDIF
}

Notez que le premier n'est pas un script d'application, mais un pseudocode expliquant la logique. Cela se traduit par le script d'applications suivant:

function onEdit(event) {
  var sheet = SpreadsheetApp.getActiveSheet();
  var range = event.range;

  var startingRow=range.getRow();
  var numRows = range.getNumRows();
  for (var i = 1; i <= numRows; i++) {
    var rowNbr=startingRow+i-1;
    Logger.log("changed row %s",rowNbr );
    //Now check the WHOLE row
    var colLeft=1; //1=A
    var colRight=10; //10=J
    var row = sheet.getRange(rowNbr,colLeft, 1, colRight-colLeft+1);
    if(row.isBlank()) {
      row.setBorder(false, null, null, null, null, null, "black", SpreadsheetApp.BorderStyle.SOLID_MEDIUM);
    } else {
      row.setBorder(true, null, null, null, null, null, "black", SpreadsheetApp.BorderStyle.SOLID_MEDIUM);
    }
  }
}

Petite variation: iso 1 row, le code ci-dessous formate simplement une seule cellule:

function onEdit(event) {
  var sheet = SpreadsheetApp.getActiveSheet();
  var range = event.range;
  var adress= range.getA1Notation();
  Logger.log("changed cell %s", adress);
  sheet.getRange('F2').setValue(adress);

  var numRows = range.getNumRows();
  var numCols = range.getNumColumns();
  for (var i = 1; i <= numRows; i++) {
    for (var j = 1; j <= numCols; j++) {
      var currentValue = range.getCell(i,j).getValue();
      Logger.log("changed cell %s", range.getCell(i,j).getA1Notation() );
      if(currentValue != "") {
        Logger.log("positive on %s", range.getCell(i,j).getA1Notation());
        range.getCell(i,j).setBorder(true, null, null, null, null, null, "black", SpreadsheetApp.BorderStyle.SOLID_MEDIUM);
      } else {
        range.getCell(i,j).setBorder(false, null, null, null, null, null, "black", SpreadsheetApp.BorderStyle.SOLID_MEDIUM);
      }
    }
  }
}
2
Maarten Troost