Правило условного формата, ссылающееся на другой лист, при копировании поверх существующих наборов правил условного формата

#google-apps-script #google-sheets

#google-приложения-скрипт #google-таблицы #google-apps-script #google-sheets

Вопрос:

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

До сих пор я делал следующее:

Код

 /**
 *  Automatically applies conditional formatting to all the Sheets, based on that of the first one
 **/
function autoConditionalFormat() {
  // get all the sheets
  const spreadsheet = SpreadsheetApp.getActiveSpreadsheet(),
      sheets = spreadsheet.getSheets();


  // get the first spreadsheet
  const firstSheet = sheets[0],
      conditionalFormatRules = firstSheet.getConditionalFormatRules();

  sheets.forEach(function(sheet, idx) { 
                 if (idx) { 
                   // for some reason, this is throwing an Error: Conditional format rule cannot reference a different sheet. at [unknown function](Code:16) at autoConditionalFormat(Code:14)
                   sheet.setConditionalFormatRules(conditionalFormatRules);
                 }
  })

}
  

Результат

Когда я создаю триггер, чтобы при изменении запустить этот код, возникает следующая ошибка:

 Conditional format rule cannot reference a different sheet. (line 17, file "Code")
  

Есть ли способ сделать это без жесткого кодирования правил условного формата или ручного создания полного листа шаблона, который функция прослушивания просто вставляет на новый лист?

Комментарии:

1. Какая используется формула?

2. Здесь не используется никакая «формула». Я же говорил вам: я вручную создал правила условного формата ! ( Format > Conditional Formatting... )

3. Итак, что это за правило?

4. Существует несколько правил для каждого столбца в трех столбцах; / * мне придется их жестко кодировать?! */

5. Я не слышу необходимой информации о правилах. Но вы можете легко использовать формат копирования вставки: что-то вроде получения всего диапазона в листе1> .copyTo(Sheet2.getRange(..),{formatOnly:true})