Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
c Excel加载项条件加载_Excel_Vsto_Add In_Ribbon - Fatal编程技术网

c Excel加载项条件加载

c Excel加载项条件加载,excel,vsto,add-in,ribbon,Excel,Vsto,Add In,Ribbon,我使用Microsoft VS 2012和VSTO开发了一个Excel加载项 功能区属性StartFromScratch设置为True,以隐藏默认的Excel功能区选项卡 问题是这个StartFromScratch是永久的。i、 e.即使用户希望在不使用外接程序功能的情况下正常使用Excel,也会加载外接程序并隐藏默认的Excel选项卡 有没有办法有条件地加载外接程序?i、 e.创建一个WinForms应用程序,用特定参数/参数调用Excel应用程序,以指示是否加载加载项 谢谢你的帮助 有没有办

我使用Microsoft VS 2012和VSTO开发了一个Excel加载项

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

问题是这个StartFromScratch是永久的。i、 e.即使用户希望在不使用外接程序功能的情况下正常使用Excel,也会加载外接程序并隐藏默认的Excel选项卡

有没有办法有条件地加载外接程序?i、 e.创建一个WinForms应用程序,用特定参数/参数调用Excel应用程序,以指示是否加载加载项

谢谢你的帮助

有没有办法有条件地加载外接程序

是的,有。可以在windows注册表中设置LoadBehavior键,以防止在主机应用程序启动时加载加载项。有关更多信息,请参阅。例如,可以使用1或8值,表示:

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

然后,当需要以编程方式加载外接程序时,可以在COMAddIns集合中找到COMAddin实例,查看应用程序类的相应属性,并设置返回或设置指定COMAddin对象的连接状态的属性


也可以考虑禁用所有UI功能和事件处理程序。必要时,您可以通过编程方式向外接程序发出信号,以重新启用自身。例如,请参见

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


解决办法如下:

打开功能区属性并将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文件,以便禁用外接程序的全屏属性


请注意,如果更改功能区的结构,StartFromScratch将重置为False,因此必须重新修改。

不确定这是否有帮助,谢谢。我已经知道LoadBehavior,但是这将要求用户在计算机上拥有管理权限,以便我的应用程序设置注册表值。还有其他选择吗?也可以考虑禁用所有UI功能和事件处理程序。必要时,您可以通过编程方式向外接程序发出信号,以重新启用自身。例如,请参阅。谢谢您的回答。外接程序可以按照Eugene的答案以编程方式加载。有没有办法以编程方式设置外接程序的StartFromScratch属性?没有。您需要使用功能区xml来指定该属性。事实上,经过一些工作,我已经能够做到这一点。这是一个转折点,但效果很好。