Копирование цвета фона из одного столбца в другой с помощью пользовательской функции

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

Когда я запускаю скрипт, я не получаю сообщений об ошибках, но, похоже, ничего не происходит.

Вот что я ввожу в ячейку на листе:

=copyColor("B:B", "A:A")

Я прочитал сообщение на форуме Google Apps Script, в котором говорилось, что этот тип процедуры невозможен, но я полон решимости написать сценарий, который его реализует.

Вот что в сообщении говорилось:

«Как ясно объясняется в документации, пользовательские функции возвращают значения, но они не могут устанавливать значения за пределами ячеек, в которых они находятся. В большинстве случаев пользовательская функция в ячейке A1 не может изменять ячейку A5. Это, конечно, верно и для других такие методы, как setBackground и т. д.».

Вот почему я попытался обойти проблему, НЕ ИСПОЛЬЗУЯ функцию setBackgrounds().

Есть ли другой способ? Или есть способ исправить мою, чтобы она работала?

function copyColor(rangeToCopy, rangeToPaste)
{
  //an array to store the first background colors
  var firstColors = [];
  //an array to store the second background colors
  var secondColors = [];

  //this will assign the first range into a variable
  var firstRange = SpreadsheetApp.getActiveSheet().getRange(rangeToCopy);
  //this will store the colors of the range into the firstColors array
  firstColors = firstRange.getBackgrounds();

  //this will assign the second range to a variable
  var secondRange = SpreadsheetApp.getActiveSheet().getRange(rangeToPaste);
  //this will store the colors of the range into the secondColors array
  secondColors = secondRange.getBackgrounds();

  //compare the two color arrays. if they do not match, apply the first array to the second array
  if (firstColors != secondColors)
  {
    secondColors = firstColors
  }

}

person Nikki Luzader    schedule 21.03.2018    source источник
comment
К какому диапазону вы хотите обратиться с помощью B:B?   -  person Umair Mohammad    schedule 21.03.2018
comment
secondColors = secondRange.getBackgrounds() устанавливает secondColors равным тому, что находится в rvalue. Затем secondColors = firstColors устанавливает secondColors = в firstColors. Он не обновляет то, чему изначально было равно значение secondColors.   -  person tehhowch    schedule 21.03.2018
comment
это не тот же вопрос, что и предложенный дубликат сообщения. В этом посте спрашивается Почему я не могу вызвать тестовую функцию из ячейки электронной таблицы? Это совершенно другой вопрос, чем мой, хотя он немного затрагивает мой. @|'-'|   -  person Nikki Luzader    schedule 21.03.2018
comment
@Umair B:B относится к B1-Bx (каким бы длинным ни был столбец, он покрывает всю длину столбца, т.е. если B имеет 30 строк, это то же самое, что сказать B1:B30)   -  person Nikki Luzader    schedule 21.03.2018
comment
Ваш вопрос спрашивает, как я могу сделать это с помощью этого метода, и ответ: вы не можете сделать это с помощью этого метода, который совпадает со связанным вопросом. Решение того, как я могу это сделать, состоит в том, чтобы, как было сказано в другом вопросе, запустить функцию из меню, скрипта, триггера или изображения. Для этого нельзя использовать пользовательские функции, поскольку уровень авторизации пользовательской функции ниже, чем у других методов запуска скриптов.   -  person tehhowch    schedule 21.03.2018
comment
@tehhowch спасибо, что прояснили это.   -  person Nikki Luzader    schedule 21.03.2018