web-dev-qa-db-fra.com

Ajouter automatiquement des bordures autour des cellules non vides

Je cherche à appliquer automatiquement les bordures de cellules lorsqu'une cellule n'est pas vide. Je pensais pouvoir utiliser la mise en forme conditionnelle pour cela, mais cela ne semble pas être une option.

7
TZPike05

Ceci est possible avec un script ("Outils> Editeur de script"), en utilisant la méthode setBorder . Voici un petit script de démonstration

function onEdit() {
  var cell = SpreadsheetApp.getActiveRange();
  if (cell.getValue() !== "") {
    cell.setBorder(true, true, true, true, true, true);
  }
  else {
    cell.setBorder(false, false, false, false, false, false);
  }
}

Cela fonctionne à chaque édition, met des bordures sur la cellule/plage active si elle n'est pas vide, les supprime sinon.

Cependant, la logique ci-dessus est trop simple. Si une cellule est rendue vierge par une édition, mais que ses voisins ne sont pas vierges, certaines bordures doivent être conservées. Voici une version qui résout ce problème en supprimant toutes les bordures et en les repeignant autour de cellules non vides.

function onEdit() {
  var range = SpreadsheetApp.getActiveSheet().getDataRange();
  range.setBorder(false, false, false, false, false, false);
  var values = range.getValues();
  for (var i = 0; i < values.length; i++) {
    for (var j = 0; j < values[i].length; j++) {
      if (values[i][j] !== "") {
        range.getCell(i + 1, j + 1).setBorder(true, true, true, true, true, true);
      }
    }
  }
}

Mais le clignotement constant de toutes les frontières est ennuyeux et lent et ennuyeux. Il est préférable que ce travail de peinture soit appelé manuellement, via un menu. Voici ma version finale du script: il ajoute un élément de menu "Personnalisé> Bordures pour les cellules non vides" à chaque ouverture de la feuille de calcul.

function onOpen() {
 var menu = [{name: "Borders for nonempty cells", functionName: "borders"}];
 SpreadsheetApp.getActiveSpreadsheet().addMenu("Custom", menu);
}

function borders() {
  var range = SpreadsheetApp.getActiveSheet().getDataRange();
  range.setBorder(false, false, false, false, false, false);
  var values = range.getValues();
  for (var i = 0; i < values.length; i++) {
    for (var j = 0; j < values[i].length; j++) {
      if (values[i][j] !== "") {
        range.getCell(i + 1, j + 1).setBorder(true, true, true, true, true, true);
      }
    }
  }
}
3
user79865

Je pouvais le faire simplement en utilisant le formatage conditionnel dans MS Excel, puis en important le livre dans des feuilles de Google.

Il conserve la mise en forme conditionnelle des bordures tant que je ne touche pas aux conditions de mise en forme. Dans ce cas, la mise en forme conditionnelle cesse de fonctionner pour les lignes de bordure.

C'est une implémentation que Google devrait corriger.

0
user154134