Visual Studio 2008 Office Interop 2003与2007

mco*_*eth 5 .net c# vsto

我正在使用Visual Studio .NET 2008开发Microsoft Excel的加载项.

该加载项创建一个工具栏按钮,可以单击该按钮以启动表单,该表单可用于将数据库中的值添加到活动电子表格的单元格中.

1)要求该工具在Excel 2003和2007中均可用.

2)另一个要求是,在Excel 2007中,启动按钮位于其自己的功能区选项卡上.

由于功能区选项卡的要求,我在Visual Studio中创建了两个单独的Excel加载项项目 - 每个版本的office都有一个.

但是,因为这两个加载项必须引用两个不同的Office.Interop程序集,并且提供数据库查询表单的项目只能引用一个,我发现自己无法在两个加载项项目之间共享第三个程序集.

有没有人比为两个附加版本中的每一个维护表单代码的单独副本有更简单的解决方案?

谢谢.

Hei*_*nzi 4

有两种选择:

选项 1:不要引用提供数据库查询的共享项目中的任何 Interop 程序集。使用接口和依赖项注入从加载项项目提供所需的 Excel 互操作性代码。

让我举个例子:假设您的共享项目需要执行一些需要访问互操作库的函数func 。您可以在共享项目中创建一个界面:

public interface ExcelInterface {
    void func();
} 
Run Code Online (Sandbox Code Playgroud)

在您的外接程序项目中,您提供此接口的实现:

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

同样,您可以Excel2007Interface在 Excel 2007 插件中创建。

然后,当在共享项目中打开表单时,您传递一个 or 的实例Excel2003InterfaceExcel2007Interface表单使用该实例来调用func

void DoSomething(ExcelInterface iface) {  // this is in your shared project
    ...
    iface.func();
    ...
}
Run Code Online (Sandbox Code Playgroud)

选项 2:使用 Visual Studio 鲜为人知的链接文件功能在两个外接程序项目之间共享代码。