在 VSTO Excel 插件应用程序中管理 ActiveWorkbook 的最佳方式
Best way to manage the ActiveWorkbook in a VSTO Excel Addin application
我开发了一个相当复杂的 Excel 插件(基于 VTSO),它根据数据库查询创建一个内存数据表,然后将其绑定到 ListObject。创建此 ListObject 时还有许多其他功能可用(包括更新数据表中计算的事件处理程序,以及弹出以显示有关单元格的其他信息的自定义任务窗格)。
插件运行良好,但当用户打开其他 Excel 工作簿或 Excel 的其他实例以进行多任务处理时我遇到了问题。
管理此特定应用程序状态的最佳方法是什么?用户一次只能处理此工作簿的一个副本,但是 Excel 的灵活性使其难以管理。
其他人如何管理这个?我正在考虑在创建工作簿时创建一个 GUID,然后在调用代码时对此进行测试以确保活动工作簿是正确的工作簿。或者有更好的方法吗?
我认为您不应该强迫用户只使用一个工作簿。
对于 excel 2013 及更高版本,您应该保留对所有打开的工作簿的引用(例如在字典中)。每次新工作簿 activate/deactivate 时,您都需要更新这些引用。您可以使用对应于唯一顶级 windows 句柄的整数 Globals.ThisAddIn.Application.Hwnd
作为字典的键。您可以将每个键附加到对应于应用程序状态的 class,每次触发工作簿 activate/deactivate 事件时,您都需要更新这些状态。
换句话说,由于 Globals.ThisAddIn.Application.Hwnd
,您应该将应用程序的设置(数据库连接...)附加到工作簿,而不需要使用 GUID。
另见 this answer 以供参考。
我开发了一个相当复杂的 Excel 插件(基于 VTSO),它根据数据库查询创建一个内存数据表,然后将其绑定到 ListObject。创建此 ListObject 时还有许多其他功能可用(包括更新数据表中计算的事件处理程序,以及弹出以显示有关单元格的其他信息的自定义任务窗格)。
插件运行良好,但当用户打开其他 Excel 工作簿或 Excel 的其他实例以进行多任务处理时我遇到了问题。
管理此特定应用程序状态的最佳方法是什么?用户一次只能处理此工作簿的一个副本,但是 Excel 的灵活性使其难以管理。
其他人如何管理这个?我正在考虑在创建工作簿时创建一个 GUID,然后在调用代码时对此进行测试以确保活动工作簿是正确的工作簿。或者有更好的方法吗?
我认为您不应该强迫用户只使用一个工作簿。
对于 excel 2013 及更高版本,您应该保留对所有打开的工作簿的引用(例如在字典中)。每次新工作簿 activate/deactivate 时,您都需要更新这些引用。您可以使用对应于唯一顶级 windows 句柄的整数 Globals.ThisAddIn.Application.Hwnd
作为字典的键。您可以将每个键附加到对应于应用程序状态的 class,每次触发工作簿 activate/deactivate 事件时,您都需要更新这些状态。
换句话说,由于 Globals.ThisAddIn.Application.Hwnd
,您应该将应用程序的设置(数据库连接...)附加到工作簿,而不需要使用 GUID。
另见 this answer 以供参考。