C# Visual Studio 2008 Office Interop 2003与2007

C# Visual Studio 2008 Office Interop 2003与2007,c#,.net,vsto,C#,.net,Vsto,我正在使用Visual Studio.NET 2008为Microsoft Excel开发外接程序 外接程序创建单个工具栏按钮,单击该按钮可启动表单,该表单可用于将数据库中的值添加到活动电子表格的单元格中 1) 要求该工具在Excel 2003和2007中都可用 2) 另一个要求是,在Excel2007中,启动按钮必须位于其自己的功能区选项卡上 由于ribbon选项卡的要求,我在Visual Studio中创建了两个单独的Excel加载项项目,每个版本的office对应一个 但是,由于两个外接程

我正在使用Visual Studio.NET 2008为Microsoft Excel开发外接程序

外接程序创建单个工具栏按钮,单击该按钮可启动表单,该表单可用于将数据库中的值添加到活动电子表格的单元格中

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

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

由于ribbon选项卡的要求,我在Visual Studio中创建了两个单独的Excel加载项项目,每个版本的office对应一个

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

有没有人有比为两个外接程序版本中的每个版本分别维护表单代码副本更简单的解决方案

谢谢。

有两种选择:

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

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

public interface ExcelInterface {
    void func();
} 
在外接程序项目中,提供此接口的实现:

class Excel2003Interface : ExcelInterface { // located in your Excel 2003 Addin
    void func() {
        // the code here can use the Excel 2003 interop reference
    }
}
同样,您也可以在Excel 2007加载项中创建
Excel2007界面

然后,在共享项目中打开表单时,您会传递一个
Excel2003Interface
Excel2007Interface
的实例,表单使用该实例调用
func

void DoSomething(ExcelInterface iface) {  // this is in your shared project
    ...
    iface.func();
    ...
}
选项2:使用VisualStudio的少量功能在两个外接程序项目之间共享代码