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。
你对如何复制和修复它有什么想法吗?也许是配置问题?
客户建议:
-
客户端上可能的安全设置。
-
有安装程序吗?如果是,请尝试卸载然后重新安装。
-
另外,从SDK中获取调试器。您可能能够在客户端计算机上使用,这取决于您的构建设置、配置设置以及您是否部署了pdb。
-
您在客户端上修复了.NET 4.0吗?
-
您是否修复了客户端上的VSTO 4运行时?此外,还需要对VSTO 4运行时进行更新。
代码建议:
-
事件未激发的最可能原因是对象发生更改,并且丢失了对该事件的引用。确保数据集永远不会更改。
-
请确保没有删除事件处理程序。
-
可能存在导致数据集变量重置和事件丢失的错误。
-
可能正在处理,然后创建另一个实例。
尝试使用Application.SheetChange,它可以更可靠地
UPD当您处理包装的COM对象并订阅它的事件时,您需要保留对原始对象的引用以使其保持活动(事件订阅是不够的)