Это вопрос от одного из моих клиентов, который разрабатывает веб-надстройку для Excel, он хотел бы определить, запускается ли событие конечным пользователем или запускается кодом.
Они зарегистрировались обработчик события Worksheet.onChanged.
Они хотели бы игнорировать изменение события onChanged, которое запускается самим их кодом. и сосредоточиться на Обработке обработчика событий следует выполнять только тогда, когда пользователь изменил значения.
Сценарий: надстройка прослушивает событие sheetChange. пользователь надстройки для ввода значений в перекрестные таблицы, которые надстройка отправит sh на сервер. Однако API надстройки также может вносить некоторые изменения в перекрестные таблицы, например, надстройка может разрешить пользователю один щелчок и развернуть, чтобы получить больше данных, их API logi c будет извлекать данные из службы и записывать к перекрестным таблицам. однако событие sheetChanged также будет инициировано.
Решения, которые опробовал заказчик:
Первая попытка: мы попытались отменить регистрацию обработчика событий перед изменением значений. Затем мы снова зарегистрировались после изменения значений. Это не сработало, так как отмена регистрации выполняется asyn c, и мы не смогли дождаться отмены регистрации.
Вторая попытка: context.runtime.enableEvents = false Это невозможно, поскольку есть другие события, которые мы все еще продолжаем интересует.
Текущая попытка: Мы сохраняем адрес измененного диапазона перед изменением значений. В обработчике onChanged мы сравниваем адрес. Если то же самое не делаем логи c. После этого мы снова удаляем хранилище адреса.
Я также пробовал использовать глобальный флаг и проверял его в обработчике событий, он не работает. вот моя суть: https://gist.github.com/lumine2008/2b51d94d20cdca9ac9a0e97029dfd95c