【问题标题】:Best way to manage the ActiveWorkbook in a VSTO Excel Addin application在 VSTO Excel Addin 应用程序中管理 ActiveWorkbook 的最佳方式
【发布时间】:2017-09-21 03:29:58
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: .net excel vsto


    【解决方案1】:

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

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

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

    另请参阅this answer 以供参考。

    【讨论】:

    • 谢谢@Malick。听起来是个好方法。鉴于 Excel 的灵活性,我担心确保用户只通过插件影响正确的工作簿,否则我会看到大问题。管理任务窗格也是一个问题。感谢您的想法!
    猜你喜欢
    • 1970-01-01
    • 2011-02-10
    • 1970-01-01
    • 2023-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-30
    相关资源
    最近更新 更多