Как принудительно пересчитать все функции в Гугл Таблицах?
Я использую Google Apps Scripts в работе с Гугл Таблицами. Так как в некоторых моих (пользовательских) функциях мне нужны свойства диапазонов Гугл Таблиц, я передаю аргументы в них с использованием кавычек, например вот так:
`=Count_Shifts_Of("B7:AF7";"B5:AF5";"A7";"B2")`
Но из-за этого, когда я меняю данные в этих диапазонах - функции никак не реагируют на эти изменения. Чтобы пересчитать их с учетом изменений, нужно удалить ее из ячейки, а затем прописать заново, из-за чего реальная работа с такой таблицей по-сути невозможна.
В связи с этим, возник вопрос - можно ли как-либо принудительно пересчитать все формулы в Гугл Таблице (с помощью встроенных возможностей, или с помощью какого-либо пользовательского скрипта).
Если же такой возможности нет, то как можно решить описанную мною проблему с пересчетом значений в пользовательских функциях?
Ответы (1 шт):
Я использую метод парсинга формулы. Дело в том, что формула всегда передает в активный диапазон свое положение
const formula = book.getActiveRange().getFormula();
const [skip, addr] = formula.match(/\((.*)\)/) || [undefined, undefined];
if(addr){
const range = (/!/.test(addr) ? book : book.getActiveSheet()).getRange(addr);
Пример в Таблице https://docs.google.com/spreadsheets/d/1hl1zEArivMDAeTycfUOjNYXT5oTA5cPmlgC6KLt-6D4/edit?usp=sharing
Вам необходимо переделать этот пример таким образом, чтобы читались четыре аргумента, а не один. Вероятно, надо добавить
const [addr1, addr2, addr3, addr4] = addr.split(/\s*;\s*/)
Тогда формула будет пересчитываться постоянно.
Другой выход, более простой, передавать четвертый аргумент, весь лист
=Count_Shifts_Of("B7:AF7";"B5:AF5";"A7";"B2";A:Z)