在VSTO Excel Addin应用程序中pipe理ActiveWorkbook的最佳方法

我已经开发了一个相当密集的Excel Addin(基于VTSO),它从数据库查询创build一个内存数据表,然后将其绑定到ListObject。 当创build这个ListObject(包括更新数据表中的计算的事件处理程序,以及popup以显示有关单元的附加信息的自定义任务窗格)时,还有其他一些function可用。

Addin工作正常,但是当用户打开其他Excel工作簿或其他Excel工作实例时,出现问题。

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

其他人如何pipe理? 我正在考虑在创build工作簿时创build一个GUID,然后在调用代码时testing这个GUID,以确保活动工作簿是正确的工作簿。 或者,还有更好的方法?

我相信你不应该强迫用户只使用一个工作簿。

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

换句话说,您应该将您的应用程序(数据库连接…)的设置附加到工作簿感谢Globals.ThisAddIn.Application.Hwnd ,不需要使用GUID。

另请参阅此答案以供参考。