OnEdit-триггер в сочетании с функциями-ячейками - PullRequest
1 голос
/ 12 декабря 2011

У меня есть onEdit-скрипт, который вычисляет значение ячейки на основе содержимого ряда других ячеек. Мне нужно, чтобы этот скрипт был в триггере onEdit, а не в обычной функции ячейки, потому что я не всегда хочу, чтобы вычисление повторялось при изменении значения в одной из целевых ячеек, но вместо этого он проверяет определенные условия и пересчитывает только тогда, когда они выполнены.

Небольшая проблема, с которой я столкнулся, заключается в том, что одна из ячеек, из которых скрипт onEdit считывает данные, содержит функцию, а не простое число. Это вызывает проблему, потому что иногда, когда я вводю данные в ячейку, это вызывает и эту функцию-ячейку, и сценарий onEdit. И большую часть времени функция oEdit запускается до завершения функции ячейки, поэтому функция onEdit просто берет «Мышление» из этой ячейки и, таким образом, возвращает NaN.

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

Конечно, я мог бы переместить функцию ячейки (которая в основном является функцией SUM с некоторыми дополнительными функциями) в сценарий onEdit, что решило бы проблему.

Но мне не кажется, что все интерактивность в триггере onEdit выглядит так хорошо. Или я просто глупый?

Или есть другой подход, который я мог бы использовать как-то?

Ответы [ 2 ]

2 голосов
/ 12 декабря 2011

Я думаю, что лучшим решением было бы заменить вашу пользовательскую формулу (которая «думает») на обычную формулу электронной таблицы, если это возможно. И это похоже на ваш случай, так как это просто функция SUM с «дополнительной функциональностью». Вероятно, SUMIF будет достаточно.

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

Независимо от вашей проблемы, я всегда советую не использовать пользовательские формулы, они действительно проблематичны. например Вы не сталкивались с проблемой кеширования?

0 голосов
/ 13 декабря 2011

Вы можете попробовать: SpreadsheetApp.flush (); в начале сценария onEdit () для принудительного повторного вызова перед продолжением.

http://code.google.com/googleapps/appsscript/class_spreadsheetapp.html#flush

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