【问题标题】:c# Excel add-in Conditional Loadingc# Excel 加载项条件加载
【发布时间】:2015-03-05 10:31:47
【问题描述】:

我使用 Microsoft VS 2012 和 VSTO 开发了一个 Excel-Addin。

功能区属性“StartFromScratch”设置为 True,以隐藏默认的 Excel 功能区选项卡。

问题是这个“StartFromScratch”是永久性的。即,即使用户想在不使用加载项功能的情况下正常使用 Excel,加载项也会加载并隐藏默认的 Excel 选项卡。

有没有办法有条件地加载加载项?即创建一个 WinForms 应用程序,该应用程序使用特定参数/参数调用 Excel 应用程序,以指示是否加载插件。

感谢您的帮助

【问题讨论】:

标签: excel vsto add-in ribbon


【解决方案1】:

有没有办法有条件地加载插件?

是的,有。您可以在 Windows 注册表中设置 LoadBehavior 键,以防止加载项在主机应用程序启动时加载。请参阅Registry Entries for Application-Level Add-Ins 了解更多信息。例如,您可以使用代表 1 或 8 的值:

应用程序不会尝试自动加载加载项。用户可以尝试手动加载插件,也可以通过编程方式加载插件

然后当您需要以编程方式加载外接程序时,您可以在 COMAddIns 集合中找到 COMAddin 实例(参见 Application 类的相应属性)并设置返回或设置连接状态的 Connect 属性对于指定的 COMAddIn 对象。

您也可以考虑禁用所有 UI 功能和事件处理程序。需要时,您可以通过编程方式向加载项发出信号以重新启用自身。例如,请参阅Walkthrough: Calling Code in an Application-Level Add-in from VBA

最后,您可以在 MSDN 中的以下系列文章中阅读有关 Ribbon UI(又名 Fluent)的更多信息:

【讨论】:

  • 谢谢。我已经知道 LoadBehavior,但是这将要求用户在机器上具有“管理”权限,以便我的应用程序设置注册表值。有没有其他选择?
  • 您也可以考虑禁用所有 UI 功能和事件处理程序。需要时,您可以通过编程方式向加载项发出信号以重新启用自身。例如,请参阅Walkthrough: Calling Code in an Application-Level Add-in from VBA
  • 感谢您的回答。加载项可以根据 Eugene 的回答以编程方式加载。有没有办法以编程方式设置加载项的“StartFromScratch”属性?
  • 不。您需要使用功能区 xml 来指定该属性。
  • 实际上,经过一些工作,我能够做到。这是一个转机,但效果很好。
【解决方案2】:

解决方法如下:

打开您的功能区属性并设置StartFromScratch = true;

然后打开你的 Ribbon.Designer.cs 搜索 this.StartFromScratch = true;

替换为 this.StartFromScratch = System.IO.File.Exists(@System.IO.Path.GetTempPath() + "\\whateverFile.xyz");

创建另一个 Exe 文件,该文件在调用时创建并清空whateverFile.xyz,然后启动 Excel。

请记住,此 exe 必须保持运行,并且当 Excel 退出时,该 exe 必须删除文件whateverFile.xyz,以禁用加载项的 FullScreen 属性。

注意,如果你改变了Ribbon的结构,StartFromScratch被重置为False,所以必须重新修改。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-03-09
    • 2010-10-21
    • 1970-01-01
    • 1970-01-01
    • 2017-05-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多