Автоматически добавлять границу в строку, если ячейка не пуста - PullRequest
1 голос
/ 11 января 2020

Я хочу знать, пожалуйста, как сделать условное форматирование границы в листах Google

, если мой лист такой:

enter image description here

Я хочу, чтобы это происходило таким образом, когда что-то редактировалось

enter image description here

PS: мой лист импортирует данные с другого листа, надеюсь, этого не произойдет создать проблему с применением функции

Ответы [ 2 ]

2 голосов
/ 13 января 2020

Используя Google Apps Script, вы можете создать функцию, которая:

  1. Удаляет все границы на вашем листе.

  2. Находит все пустые строки, к которым должны применяться границы.

  3. Устанавливает границы для этих строк.

Следующий код выполняет действия, описанные выше:

function setSheetBorders() {
  var ss = SpreadsheetApp.getActive();
  var sheet = ss.getSheetByName('Sheet1');

  // Remove all borders
  var dataRange = sheet.getDataRange();
  dataRange.setBorder(false, false, false, false, false, false);

  var firstColumn = sheet.getRange("A:A").getValues();
  var ranges = [];

  for (var i=1; i<firstColumn.length; i++) {
    if (firstColumn[i][0]) {
      ranges.push("A" + i + ":" + i);
    }
  }

  sheet.getRangeList(ranges).setBorder(false, false, true, false, false, false, "black",
                                       SpreadsheetApp.BorderStyle.SOLID_MEDIUM);
}

Запуск выполнения сценария

Что касается выполнения этого сценария, идеальной ситуацией будет его автоматическое выполнение при редактировании листа. Это можно сделать с помощью триггера onEdit(). Настроить его так же просто, как создать следующую функцию в скрипте, привязанном к листу:

function onEdit(e) {
  setSheetBorders();
}

Однако, это будет только , когда пользователь будет редактировать листа, а не при редактировании сценария.

Поскольку изменение документа Sheets предназначено для визуализации, я предлагаю вместо этого использовать триггер onOpen(). Это приведет к тому, что приведенный выше скрипт будет выполняться всякий раз, когда пользователь обращается к документу.

function onOpen(e) {
  setSheetBorders();
}

Кроме того, вы также можете рассмотреть вопрос о создании пользовательского меню . Это позволит вам вручную запускать скрипт, когда вы захотите использовать пользовательский интерфейс.

function onOpen() {
  var ui = SpreadsheetApp.getUi();
  ui.createMenu('Custom Menu')
      .addItem('Set Sheet Borders', 'setSheetBorders')
      .addToUi();

  setSheetBorders();
}

example menu

1 голос
/ 11 января 2020

Насколько я знаю, нет способа "обнаружить" изменения и использовать условное форматирование, чтобы отразить это. Самое близкое к этому было бы сделать оператор IF и сделать что-то подобное, как показано ниже в разделе пользовательских формул меню условного форматирования.

=B1=67890779

или это для проверки нескольких ячеек

=B1=67890779=B2=86687585

Насколько мне известно, это самый близкий способ "обнаружить" изменения

РЕДАКТИРОВАТЬ: мне напомнили, что нет никаких вариантов для изменения границ в условном форматировании.
Моя единственная идея для этого будет сделайте строки достаточно маленькими, чтобы они выглядели как границы, и используйте условное форматирование для изменения фона ячеек.

Надеюсь, это поможет

...