Как защитить условное форматирование в гугл листе? - PullRequest
0 голосов
/ 01 марта 2020

У меня есть 2 CF на листе, которые я хотел бы сохранить при копировании / вставках. Вы можете увидеть диапазон и формулы ниже.

CF1 Range : B3:H1001
CF1 Formula : =($A3<>"")*(B3="") //This one higlights the empty cells in a given range

CF2 Range : A3:R1001  // This one highlights the row if the cell in R column is No.
CF2 Formula : =$R:$R="No"

Есть ли способ защитить эти CF или применить их снова после копирования пасты? Спасибо!

1 Ответ

2 голосов
/ 02 марта 2020

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

При ответе выше я понял, что вы хотите сохранить условные форматы, которые =($A3<>"")*(B3="") для B3:H1001 и =$R:$R="No" для A3:R1001, даже если диапазон скопирован и вставлен в B3:H1001 и A3:R1001.

Если мое понимание верно, как насчет этого ответа ? Думайте об этом как об одном из нескольких возможных ответов.

Проблема и обходное решение:

К сожалению, на данном этапе, к сожалению, в скрипте Google Apps нет методов прямой защиты условных форматов. Поэтому в этом случае в качестве обходного пути я хотел бы предложить перезаписать условные форматы при изменении условных форматов и ячеек, используя триггер события OnChange.

Поток:

  1. диапазон копируется и параметры условных форматов изменяются.
  2. Сценарий автоматически запускается триггером события OnChange.
  3. Существующие условные форматы удаляются и устанавливаются новые условные форматы.

Использование:

1. Скопируйте и вставьте образец сценария

Пожалуйста, скопируйте и вставьте следующий образец сценария.

Пример сценария:

Пожалуйста, укажите имя листа.

function onChange(e) {
  const sheetName = "Sheet1";  // Please set the sheet name.

  if (e.source.getActiveSheet().getSheetName() != sheetName || e.changeType != "OTHER") return;

  const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(sheetName);
  var rules = sheet.clearConditionalFormatRules();
  const rule1 = SpreadsheetApp.newConditionalFormatRule()
    .setRanges([sheet.getRange("B3:H")])
    .setBackground("green")
    .whenFormulaSatisfied('=($A3<>"")*(B3="")').build();
  const rule2 = SpreadsheetApp.newConditionalFormatRule()
    .setRanges([sheet.getRange("A3:R")])
    .setBackground("green")
    .whenFormulaSatisfied('=$R:$R="No"').build();
  sheet.setConditionalFormatRules([rule1, rule2]);
  SpreadsheetApp.flush();  // This line might not be required.
}
  • В этом примере Сценарий, 2 условных формата в вашем вопросе установлены в качестве фона зеленого цвета.

2. Установите триггер события OnChange

Пожалуйста, установите триггер события OnChange для функции onChange.

3. Тестовый прогон

В качестве тестового прогона скопируйте и вставьте диапазон в sheetName. Таким образом, скрипт запускается триггером события OnChange.

Примечание:

  • Я думаю, что триггер события OnEdit также можно использовать. Но в этом случае при изменении параметров условных форматов триггер события не запускается. Поэтому я использовал триггер события OnChange.

Ссылки:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...