VB - Visual Studio 2010中的自动Excel - 选择更改问题

时间:2010-11-02 16:38:45

标签: vb.net excel selectionchanging

我目前正在编写一个实用程序,它从excel文档中获取两组不同的数据并将其发送到两个不同的Web服务。每组数据都有自己的按钮,可以将数据发送到Web服务。单击a按钮时,相应的Web服务将根据输入值返回数据。

我想要做的是这个实用程序可以被各种各样的人使用。他们将要做的是将他们自己的excel文档的特定单元格同步到我的实用程序中的相应单元格。使用简单的excel公式。例如:

c:\temp\[book1.xls]sheet1'!a1

现在我要做的是当用户将他们的单元格链接到我的实用程序上的相应单元格时,在我的实用程序上自动“单击”按钮或更新。

我在页面上尝试过选择更改事件。但是在我的实用程序处于活动状态或单击之前,它实际上并不会处理。

有没有办法让我的实用程序自动更新?如果在我的实用程序关闭时以某种方式执行此操作,那将特别棒。因此,当用户打开它时,它已经填充了他们的信息,并且输出是正确的。

1 个答案:

答案 0 :(得分:2)

要求:
您需要保证当用户使用Excel时,您的应用可以收集数据。您的应用可能当时没有运行。您需要自动触发Worksheet_SelectionChange()事件才会自动触发。

解决方案:
基本上为了保证Worksheet_SelectionChange()一直在运行,并且为了保证每当用户打开excel实例时,您都能够收集和处理输入到特定目标范围地址的数据/公式。连接VB.NET Excel COM Addin中的selectionchange事件。有几种方法可以做到这一点,但由于您使用VB.NET最好使用最新的方法来构建VSTO COM Addin。 关于如何最好地构建VSTO插件还有很多其他的问题(有些在C#中有些在VB.NET中,但所有这些信息对于两者都完全相同,只是语法不同)。
所以你需要两个项目。您现有的,以及Excel VSTO插件(您也可以在VB.NET中执行)。

现在在selectionchange事件中,您应该确保您的代码正确处理目标范围;即。确保通过选择来检查不可饶恕的范围组... A1:B1; D2:E2并将数据复制到您的应用程序。您可以考虑使用诸如xml之类的格式来序列化来自excel的最新数据,这样,如果您的应用程序当时未打开,它可以反序列化并在下次打开时回读为其存储的数据。我想这真的取决于你处理数据的方式(即它是否用于加载到数据网格中?)以及你是否要进行进一步的处理并将其存储在其他地方(在这种情况下,你可以将它直接放入数据库中) exin中的插件)。