【发布时间】:2015-04-20 05:48:07
【问题描述】:
我有一个用户需求,我已经与之斗争了一段时间,但没有成功。我需要编写一个插件,每隔几分钟就可以读取大约 100 个公式驱动的单元格(特定电子表格的),然后发送到 Web 服务。
我非常乐意使用 Excel-DNA 或 VSTO,但到目前为止我尝试过的所有操作都会导致用户界面暂停一会。如果数据是从活动电子表格中读取的(即使是从不同的线程),这种情况是否总是如此?
【问题讨论】:
我有一个用户需求,我已经与之斗争了一段时间,但没有成功。我需要编写一个插件,每隔几分钟就可以读取大约 100 个公式驱动的单元格(特定电子表格的),然后发送到 Web 服务。
我非常乐意使用 Excel-DNA 或 VSTO,但到目前为止我尝试过的所有操作都会导致用户界面暂停一会。如果数据是从活动电子表格中读取的(即使是从不同的线程),这种情况是否总是如此?
【问题讨论】:
从不同的线程读取工作表可能比从 Excel 主线程读取的效果更差(比如在某个事件或某事中)。这是由于跨线程调用所需的 COM 线程切换。最后,无论如何,所有的 COM 调用都必须在主线程上完成它们的工作。
通过挂钩某些 Excel 事件(例如启动 Workbook.SheetChange 事件,然后检查更改是否影响您监视的 Range(s) 并使用新数据更新内部数据结构,您可能会取得更大的成功。
然后,您可以从后台线程定期(或仅在监视的单元格发生更改时)更新后端。
【讨论】:
您需要运行辅助线程将数据发布到 Web 服务,以防止任何 UI 冻结。
【讨论】: