为VSTO应用程序创build跨项目function区

我正在寻找创build一个不同的应用程序可以访问的function区。 基本上我有几个VSTO excel加载项分别构build,并有单独的安装文件。 他们都有自己的缎带(尽pipe我在每个项目中都给出了相同的描述和名称)。 有没有办法让他们(他们是应用程序)安装在Excel UI中的一个function区? 如果用户安装了多个应用程序,则最终会有两个命名为完全相同的function区段。

我从2008年就find了这个链接,但是无法在Visual Studio 2017中使用2016 VSTO。

https://blogs.msdn.microsoft.com/vsto/2008/03/10/share-a-ribbon-customization-between-office-applications-norm-estabrook/

您可以为您的应用程序级加载项提供一个到其他加载项的接口。

You can expose an object in an VSTO Add-in to the following types of solutions: - Visual Basic for Applications (VBA) code in a document that is loaded in the same application process as your VSTO Add-in. - Document-level customizations that are loaded in the same application process as your VSTO Add-in. - Other VSTO Add-ins created by using the Office project templates in Visual Studio. - COM VSTO Add-ins (that is, VSTO Add-ins that implement the IDTExtensibility2 interface directly). - Any solution that is running in a different process than your VSTO Add-in (these types of solutions are also named out-of-process clients). These include applications that automate an Office application, such as a Windows Forms or console application, and VSTO Add-ins that are loaded in a different process. 

添加标记。

 [ComVisible(true)] public interface IAddInUtilities { void ImportData(); } [ComVisible(true)] [ClassInterface(ClassInterfaceType.None)] public class AddInUtilities : IAddInUtilities { // This method tries to write a string to cell A1 in the active worksheet. public void ImportData() { Excel.Worksheet activeWorksheet = Globals.ThisAddIn.Application.ActiveSheet as Excel.Worksheet; if (activeWorksheet != null) { Excel.Range range1 = activeWorksheet.get_Range("A1", System.Type.Missing); range1.Value2 = "This is my data"; } } } 

提供它。

 private AddInUtilities utilities; protected override object RequestComAddInAutomationService() { if (utilities == null) utilities = new AddInUtilities(); return utilities; } 

从另一个加载项调用它。

 object addInName = "ExcelImportData"; Office.COMAddIn addIn = Globals.ThisAddIn.Application.COMAddIns.Item(ref addInName); ExcelImportData.IAddInUtilities utilities = (ExcelImportData.IAddInUtilities)addIn.Object; utilities.ImportData();