VSTO ColumnChanging事件未触发且HasChanges在Excel工作表上无法正常工作

时间:2012-02-15 09:10:54

标签: c# windows-7 ado.net vsto excel-2007

一些背景知识:有一个用c#,。net 4.0编写的Excel VSTO插件 Excel有许多选项卡,使用DataSet从数据库填充数据。当用户向工作表添加数据时,某些列会自动使用默认数据进行设置。我们使用DataSet的HasChanges方法来检查数据是否有修改并突出显示它们。

一般情况下效果很好。但是我们在一个用户站上有一个奇怪的问题。 ColumnChanging事件未触发。此外,即使添加了新数据,DataSet.HasChanges方法也会返回false。

问题仅发生在安装了Excel 2007的Windows 7计算机上。

我们尝试通过禁用宏来重现DEV计算机(Windows XP,Excel 2007)上的问题,但没有成功。我们无法在用户机器上安装Visual Studio。

您对如何重现和修复它有什么想法吗?也许这是配置问题?

2 个答案:

答案 0 :(得分:1)

尝试使用Application.SheetChange,它可以更可靠

UPD当你处理被包装的COM对象并订阅它的一个事件时,你需要保持对原始对象的引用以使它保持活动状态(事件订阅是不够的)

答案 1 :(得分:1)

客户建议:

  • 客户端上可能的安全设置。

  • 有安装人员吗?如果是这样,请尝试卸载然后重新安装。

  • 此外,从SDK获取调试器。您可以在客户端计算机上使用,具体取决于您的构建设置,配置设置以及部署pdb。

  • 您是否在客户端修复了.NET 4.0?

  • 您是否在客户端修复了VSTO 4运行时?此外还有VSTO 4运行时所需的更新。

代码建议:

  • 事件未触发的最可能原因是对象更改并且对事件的引用将丢失。确保数据集永远不会改变。

  • 确保尚未删除事件处理程序。

  • 可能存在导致数据集变量重置且事件丢失的错误。

  • 可能的处理然后创建另一个实例。