1

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

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

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

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

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

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

4

1 回答 1

2

要求:
您需要保证当用户使用excel时,您的应用程序可以收集数据。您的应用当时可能没有运行。您需要 Worksheet_SelectionChange() 事件自动触发,而不仅仅是在您的应用程序处于活动状态时。

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

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

于 2010-11-03T00:09:22.430 回答