2017-08-26 12 views
2

私は、異なるアプリケーションがアクセスできる単一のリボンを作成しようとしています。基本的に私は別々に構築され、別々のインストールファイルを持っているいくつかのVSTOエクセルアドインを持っています。彼らはすべて自分のリボンを持っています(私はリボンに同じプロジェクトの説明と名前を付けます)。 Excel UIの1つのリボンにそれらをインストールする方法はありますか?ユーザーが複数のアプリをインストールすると、まったく同じ名前のリボンセクションが2つあります。 VSTOアプリケーション用のプロジェクト間リボンの作成

は、私が2008年から、このリンクを見つけたが、それは、Visual Studio 2017年

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

答えて

1

あなたはmake an interface to your application-level Add-In available to other Add-Ins.

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. 

は、マークアップを追加することができますで2016 VSTOで動作させることができませんでした。

[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(); 
関連する問題