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

本文关键字:工作 常工作 Excel 事件 ColumnChanging HasChanges VSTO | 更新日期: 2023-09-27 18:24:33

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

总的来说,它运行得很好。但我们在一个用户站上遇到了一个奇怪的问题。ColumnChanging事件未激发。此外,即使添加了新数据,DataSet.HasChanges方法也返回false。

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

我们试图通过禁用宏在DEV机器(Windows XP、Excel 2007)上重现这个问题,但没有成功。显然,我们无法在用户机器上安装Visual Studio。

你对如何复制和修复它有什么想法吗?也许是配置问题?

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

客户建议:

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

  • 有安装程序吗?如果是,请尝试卸载然后重新安装。

  • 另外,从SDK中获取调试器。您可能能够在客户端计算机上使用,这取决于您的构建设置、配置设置以及您是否部署了pdb。

  • 您在客户端上修复了.NET 4.0吗?

  • 您是否修复了客户端上的VSTO 4运行时?此外,还需要对VSTO 4运行时进行更新。

代码建议:

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

  • 请确保没有删除事件处理程序。

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

  • 可能正在处理,然后创建另一个实例。

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

UPD当您处理包装的COM对象并订阅它的事件时,您需要保留对原始对象的引用以使其保持活动(事件订阅是不够的)