.net 在VSTO Excel加载项应用程序中管理Active工作簿的最佳方法

.net 在VSTO Excel加载项应用程序中管理Active工作簿的最佳方法,.net,excel,vsto,.net,Excel,Vsto,我开发了一个相当密集的Excel插件(基于VTSO),它从数据库查询创建内存中的数据表,然后将其绑定到ListObject。创建此ListObject时,还有许多其他函数可用(包括更新datatable中计算的事件处理程序,以及弹出以显示有关单元格的其他信息的自定义任务窗格) 该插件运行良好,尽管当用户打开其他Excel工作簿或Excel的其他实例以执行多任务工作时,我会遇到问题 管理此特定应用程序状态的最佳方法是什么?用户一次只能处理此工作簿的一个副本,但是Excel的灵活性使其难以管理 其他

我开发了一个相当密集的Excel插件(基于VTSO),它从数据库查询创建内存中的数据表,然后将其绑定到ListObject。创建此ListObject时,还有许多其他函数可用(包括更新datatable中计算的事件处理程序,以及弹出以显示有关单元格的其他信息的自定义任务窗格)

该插件运行良好,尽管当用户打开其他Excel工作簿或Excel的其他实例以执行多任务工作时,我会遇到问题

管理此特定应用程序状态的最佳方法是什么?用户一次只能处理此工作簿的一个副本,但是Excel的灵活性使其难以管理


其他人是如何做到这一点的?我想在创建工作簿时创建一个GUID,然后在调用代码时进行测试,以确保活动工作簿是正确的工作簿。或者有更好的方法吗?

我认为你不应该强迫用户只使用一个工作簿

对于excel 2013及更高版本,您应该维护对所有打开的工作簿的引用(例如在字典中)。每次激活/停用新工作簿时,您都需要更新这些引用。您可以将对应于唯一顶级windows句柄的整数
Globals.ThisAddIn.Application.Hwnd
用作字典的键。您可以将每个键附加到与应用程序状态相对应的类,每次触发工作簿激活/停用事件时,您都需要更新这些状态

换句话说,由于
Globals.ThisAddIn.application.Hwnd
,您应该将应用程序的设置(数据库连接…)附加到工作簿,而无需使用GUID


另请参阅以供参考。

谢谢@Malick。听起来是个好办法。鉴于Excel的灵活性,我关心的是确保用户只通过加载项影响正确的工作簿,否则我会看到大问题。管理任务窗格也是一个问题。谢谢你的想法!