2017-07-24 17 views
1

我开发了一个相当密集的Excel Addin(基于VTSO),它从数据库查询创建内存数据表,然后将其绑定到ListObject。当创建此ListObject时(包括更新数据表中的计算的事件处理程序和弹出以显示关于单元格的其他信息的自定义任务窗格),还有其他一些功能可用。在VSTO Excel Addin应用程序中管理ActiveWorkbook的最佳方法

Addin可以很好地工作,虽然我在用户打开其他Excel工作簿或Excel的其他实例以在工作中执行多任务时遇到问题。

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

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

回答

1

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

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

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

另请参阅this answer以供参考。

+1

Thanks @Malick。听起来像一个好方法。鉴于Excel的灵活性,我担心确保用户只通过插件影响正确的工作簿,否则我会发现很大的问题。管理任务窗格也是一个问题。谢谢你的想法! – darcher

相关问题