getFormulas () и setFormulas () преобразуют ссылки в #REF

У меня проблема с моей электронной таблицей, которая не обновляет формулу =IMPORTRANGE. Я перепробовал все уловки с разрешениями на совместное использование и настройками таблиц, но у меня они не работают.

Вместо этого я пытаюсь создать простой макрос, который стирает формулу и повторно вводит ее, чтобы обновить импорт. Когда я запускаю свой макрос, мои формулы превращаются в #REF.

var ss = SpreadsheetApp.getActiveSpreadsheet();
var startingSheet = ss.getActiveSheet();

var importRange = ss.getRangeByName("MasterImport");
var importFormulas = importRange.getFormulas();
importRange.clearContent();
importRange.setFormulas(importFormulas);

Моя формула в именованном диапазоне "MasterImport" впоследствии будет выглядеть так:

=IMPORTRANGE(#REF!, index(indirect(index(#REF!, match("asset_tab", #REF!, 0))),
    match(#REF!, indirect(index(#REF!, match("series_id", #REF!, 0))), 0)))

person Tommy Wu    schedule 04.01.2019    source источник
comment
Приведите пример того, какими должны быть формулы, а также значения, которые считываются в память: установите точку останова в строке importRange.clearContent(), отладьте-выполните функцию в редакторе сценариев вручную и просмотрите переменные в разделе часов внизу страницы. (Измените эту информацию в свой вопрос)   -  person tehhowch    schedule 04.01.2019
comment
Добавьте SpreadsheetApp.flush() после очистки содержимого.   -  person TheMaster    schedule 04.01.2019
comment
спасибо @TheMaster! Работал у меня. Я добавлю это как ответ для большей наглядности на случай, если другим будет интересно   -  person Tommy Wu    schedule 04.01.2019


Ответы (1)


Предложение @TheMaster сработало отлично. Вот окончательный код:

var importRange = ss.getRangeByName("MasterImport");
var importFormulas = importRange.getFormulas();
importRange.clearContent();
SpreadsheetApp.flush();
importRange.setFormulas(importFormulas);
person Tommy Wu    schedule 04.01.2019