在 VSTO Excel 加载项应用程序中管理 ActiveWorkbook 的最佳方法



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

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

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

其他人如何管理这一点? 我正在考虑在创建工作簿时创建一个 GUID,然后在调用代码时对此进行测试,以确保活动工作簿是正确的工作簿。 还是有更好的方法?

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

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

换句话说,您应该将应用程序的设置(数据库连接...(附加到工作簿,这要归功于Globals.ThisAddIn.Application.Hwnd,而无需使用GUID。

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

最新更新