【发布时间】:2020-05-09 06:43:15
【问题描述】:
这个问题来自我的一位正在开发 excel 网络插件的客户,他们想检测事件是由最终用户触发还是由代码触发。
他们已经注册了一个 Worksheet.onChanged 事件处理程序。
他们想忽略由他们的代码自己触发的 onChanged 事件更改。并专注于处理事件处理程序只应在用户更改值时进行。
场景: 加载项侦听 sheetChange 事件。插件用户将值输入到交叉表中,插件将推送到服务器。 但是,插件 API 也可以对交叉表进行一些修改,例如,插件可以使用户单击并向下钻取以获取更多数据,它们的 API 逻辑将从服务中获取数据并写入交叉表.但是,sheetChanged 事件也会被触发。
客户尝试过的解决方案:
第一次尝试: 我们尝试在更改值之前取消注册事件处理程序。 然后我们在更改值后再次注册。 这不起作用,因为注销是异步的,我们无法等待注销。
第二次尝试: context.runtime.enableEvents = false 这是不可能的,因为还有其他我们仍然感兴趣的事件。
当前尝试: 我们在更改值之前存储更改范围的地址。 在 onChanged 处理程序中,我们比较地址。 如果相同我们不做逻辑。 之后,我们再次删除地址的存储。
我也尝试使用全局标志并在事件处理程序中检查它,但它不起作用。这是我的要点:https://gist.github.com/lumine2008/2b51d94d20cdca9ac9a0e97029dfd95c
【问题讨论】:
-
您可以考虑设置一个全局标志并在事件处理程序中检查它
-
我已经尝试过这个解决方案,它看起来全局标志不起作用,这是我的示例要点。 gist.github.com/lumine2008/2b51d94d20cdca9ac9a0e97029dfd95c