c# - Visual Studio 2008 办公室互操作 2003 与 2007

标签 c# .net vsto

我正在使用 Visual Studio .NET 2008 为 Microsoft Excel 开发一个插件。

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

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

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

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

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

有没有人有比为两个插件版本分别维护一份表单代码副本更简单的解决方案?

谢谢。

最佳答案

有两种选择:

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

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

public interface ExcelInterface {
    void func();
} 

在您的加载项项目中,您为此接口(interface)提供实现:

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

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

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

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

选项 2:使用鲜为人知的 link file feature Visual Studio 在两个加载项项目之间共享代码。

关于c# - Visual Studio 2008 办公室互操作 2003 与 2007,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2290268/

相关文章:

c# - ASP.NET MVC 6 项目未被识别为 Web 项目

c# - Sharepoint 到 ASP.net MVC 文件下载

.net - 尝试使用环境变量作为配置源时,容器化 Azure 函数(v4、dotnet-isolated)中断

c# - Interop.Powerpoint : How to clear of undo (stack)

c# - 如何从 OneDrive 下载文件

c# - 安全地编写依赖于相同文件资源的单元测试?

java - 我可以使用 Lucene 进行业务应用搜索吗?

C# 平台调用,具有引用和值类型的 C 风格 union

.net - Excel 2003 ActionsPane 中的 AutoSize ElementHost

.net - VSTO 加载项是否需要签名?