Fügen Sie automatisch Ränder um nicht leere Zellen hinzu

7

Ich möchte, dass Zellränder automatisch angewendet werden, wenn eine Zelle nicht leer ist. Ich dachte, ich könnte dafür eine bedingte Formatierung verwenden, aber es scheint keine Option zu sein.

Ale
quelle

Antworten:

3

Dies ist mit einem Skript (" Extras > Skripteditor ") unter Verwendung der setBorder- Methode möglich. Hier ist ein kleines Demo-Skript

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

Dies wird bei jeder Bearbeitung ausgeführt, begrenzt die aktive Zelle / den aktiven Bereich, wenn sie nicht leer ist, und entfernt sie ansonsten.

Die obige Logik ist jedoch zu einfach. Wenn eine Zelle durch eine Bearbeitung leer gemacht wird, aber nicht leere Nachbarn hat, sollten einige Rahmen beibehalten werden. Hier ist eine Version, die dies behebt, indem alle Rahmen entfernt und um nicht leere Zellen neu gestrichen werden.

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

Aber das ständige Aufblitzen aller Grenzen ist nervig und langsam und nervig. Es ist besser, diesen Maljob manuell über ein Menü aufzurufen. Hier ist meine endgültige Version des Skripts: Es fügt beim Öffnen der Tabelle einen Menüpunkt "Benutzerdefiniert> Rahmen für nicht leere Zellen" hinzu.

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

quelle
0

Ich könnte es einfach tun, indem ich die bedingte Formatierung in MS Excel verwende und das Buch dann in Google Sheets importiere.

Die bedingte Formatierung der Rahmen bleibt erhalten, solange ich die Formatierungsbedingungen nicht berühre. In diesem Fall funktioniert die bedingte Formatierung für die Grenzlinien nicht mehr.

Es ist eine Implementierung, die Google korrigieren sollte.

user154134
quelle