2010-02-18 4 views
5

Je développe un add-in pour Microsoft Excel, en utilisant Visual Studio .NET 2008.Visual Studio 2008 Office de Interop 2003 vs 2007

Le complément crée un seul bouton de la barre d'outils, qui peut cliquer pour lancer une formulaire, qui peut être utilisé pour ajouter des valeurs d'une base de données dans les cellules de la feuille de calcul active.

1) Une autre exigence est que, dans Excel 2007, le bouton de lancement soit sur son propre onglet de ruban Une exigence est que l'outil soit disponible en Excel 2003 et 2007.

2).

En raison de l'exigence de l'onglet Ruban, j'ai créé deux projets complémentaires Excel distincts dans Visual Studio - un pour chaque version de bureau. Toutefois, étant donné que les deux compléments doivent référencer deux assemblys Office.Interop différents et que le projet fournissant le formulaire de requête de base de données ne peut en référencer qu'un seul, je ne parviens pas à partager ce troisième assemblage entre les deux projets complémentaires .

Est-ce que quelqu'un a une solution plus simple que de maintenir une copie distincte du code de formulaire pour chacune des deux versions de complément?

Merci.

Répondre

4

Il y a deux options:

Option 1: Ne pas faire référence à des assemblées Interop dans le projet partagé fournissant la requête de base de données. Utilisez les interfaces et injection de dépendance pour fournir le code d'interopérabilité Excel requis à partir des projets de complément. Permettez-moi de vous donner un exemple: Supposons que votre projet partagé doit exécuter une fonction func qui a besoin d'accéder aux bibliothèques Interop. Vous pouvez créer une interface dans votre projet commun:

public interface ExcelInterface { 
    void func(); 
} 

Dans vos projets Addin, vos fournir des implémentations pour cette interface:

class Excel2003Interface : ExcelInterface { // located in your Excel 2003 Addin 
    void func() { 
     // the code here can use the Excel 2003 interop reference 
    } 
} 

De même, vous créez Excel2007Interface dans votre Addin Excel 2007.

Ensuite, lors de l'ouverture de la forme dans le projet partagé, vous passez une instance de l'un Excel2003Interface ou Excel2007Interface, qui est utilisé par le formulaire pour appeler func:

void DoSomething(ExcelInterface iface) { // this is in your shared project 
    ... 
    iface.func(); 
    ... 
} 

Option 2: Utilisez le litte -connu link file feature de Visual Studio pour partager du code entre les deux projets de compléments.

Questions connexes