回答:
これは、setBorderメソッドを使用するスクリプト(「ツール」>「スクリプトエディター」)で可能です。ここに小さなデモスクリプトがあります
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);
}
}
これはすべての編集で実行され、空でない場合はアクティブなセル/範囲に境界線を付け、それ以外の場合は削除します。
ただし、上記のロジックは単純すぎます。編集によってセルが空白になっているが、隣接するセルが空白でない場合は、一部の境界線を保持する必要があります。これは、すべての境界線を削除し、空白でないセルの周りに再描画することでこれに対処するバージョンです。
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);
}
}
}
}
しかし、すべての境界線が絶え間なく点滅することは、煩わしく、ゆっくりと煩わしいものです。このペイントジョブは、メニューから手動で呼び出すことをお勧めします。これが私のスクリプトの最終バージョンです。スプレッドシートが開かれるたびに、メニュー項目「カスタム>空でないセルの境界線」が追加されます。
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);
}
}
}
}
MS Excelで条件付き書式を使用して、その本をGoogleシートにインポートするだけで、それを行うことができました。
フォーマットの条件に触れない限り、境界線の条件付きフォーマットを維持します。このような場合、条件付き書式は境界線に対して機能しなくなります。
Googleが修正すべき実装です。