【问题标题】:How do I regularly post excel data to a web service?如何定期将 Excel 数据发布到 Web 服务?
【发布时间】:2015-04-20 05:48:07
【问题描述】:

我有一个用户需求,我已经与之斗争了一段时间,但没有成功。我需要编写一个插件,每隔几分钟就可以读取大约 100 个公式驱动的单元格(特定电子表格的),然后发送到 Web 服务。

我非常乐意使用 Excel-DNA 或 VSTO,但到目前为止我尝试过的所有操作都会导致用户界面暂停一会。如果数据是从活动电子表格中读取的(即使是从不同的线程),这种情况是否总是如此?

【问题讨论】:

    标签: excel vsto excel-dna


    【解决方案1】:

    从不同的线程读取工作表可能比从 Excel 主线程读取的效果更差(比如在某个事件或某事中)。这是由于跨线程调用所需的 COM 线程切换。最后,无论如何,所有的 COM 调用都必须在主线程上完成它们的工作。

    通过挂钩某些 Excel 事件(例如启动 Workbook.SheetChange 事件,然后检查更改是否影响您监视的 Range(s) 并使用新数据更新内部数据结构,您可能会取得更大的成功。

    然后,您可以从后台线程定期(或仅在监视的单元格发生更改时)更新后端。

    【讨论】:

    • Govert,数据可以在主线程上读取,其他东西(与Excel对象模型无关)可以在辅助线程上运行。没有人说过要从辅助线程中触摸 Excel。这只是你的想象。
    • @Eugene - 我同意你的看法。我的回答是对原始问题的回答,而不是对您的回答的评论。在问题的最后一部分,James 问道:“如果数据是从活动电子表格中读取的(即使是从不同的线程中),这种情况总是会发生吗?”
    • 感谢您的回复,我的测试确实暗示主表受到影响,但不确定我是否错误地实施了 DNA 解决方案。我将继续进行 SheetChange 事件,看看我是否有更多的快乐。令人惊讶的是,考虑到 Excel 在金融市场领域的广泛使用,有关使用 Excel 作为数据输入机制的信息如此之少。
    【解决方案2】:

    您需要运行辅助线程将数据发布到 Web 服务,以防止任何 UI 冻结。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-05-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-27
      • 1970-01-01
      • 2011-09-15
      相关资源
      最近更新 更多