2017-08-26 2 views
2

Je cherche à créer un ruban unique auquel différentes applications peuvent accéder. Essentiellement, j'ai plusieurs add-ins VSTO qui sont construits séparément et ont des fichiers d'installation séparés. Ils ont tous leur propre ruban (bien que je donne au ruban la même description et le même nom dans chaque projet). Existe-t-il un moyen de les installer sur un seul ruban dans l'interface utilisateur d'Excel? Si un utilisateur installe plus d'une application, il se retrouve avec deux rubans nommés exactement la même chose.Créer un ruban inter-projet pour les applications VSTO

Je n'ai trouvé ce lien à partir de 2008 mais n'a pas pu obtenir de travailler avec 2016 VSTO dans Visual Studio 2017.

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

Répondre

1

Vous pouvez 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. 

Ajouter balisage.

[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"; 
     } 
    } 
} 

Fournissez-le.

private AddInUtilities utilities; 

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

    return utilities; 
} 

Appelez-le à partir d'un autre complément.

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