5

出于多种原因,我在笔记本电脑上安装了 MSExcel 2003 和 MSExcel 2007。我需要这两个版本来为每个版本开发特定项目(文档级项目和应用程序级项目)。现在我需要做一个 WinForm 项目,打开一个 Excel 文件,读取一个 CustomXMLParts 并编写一个新的 Excel 文件。我正在使用对 Microsoft.Office.Interop.Excel 的引用,它使用 ..\Visual Studio Tools for Office\PIA\ Office12 \Microsoft.Office.Interop.Excel.dll 库(适用于 Excel 2007)。对于这段代码:

Microsoft.Office.Interop.Excel.Application excelApplication;    
excelApplication = new Microsoft.Office.Interop.Excel.ApplicationClass();
string version = excelApplication.Version;

此时版本是“11.0”,但我需要打开Excel 2007,它必须是“12.0”,然后当程序尝试获取CustomXMLParts时,抛出一个异常,因为这个方法在2003中不存在。

如果我卸载 Excell 2003,它可以正常工作,但我需要同时使用这两个(2003 和 2007)。当我重新安装 Excell 2003 时,它再次失败。我检查了 Interop.Excel 参考的属性“特定版本”,以确保它是正确的,并且我尝试修改 app.config oldVersion="12.0.0.0" 以使其与 Excel 2003 不兼容,但没有任何反应:

  <assemblyIdentity name="Microsoft.Office.Interop.Excel"  publicKeyToken="71E9BCE111E9429C" culture="neutral"/>
  <bindingRedirect oldVersion="0.0.0.0-11.0.0.0" newVersion="12.0.0.0"/>

任何想法?

我正在使用 Visual Studio 2008 和 Visual Studio Tools for Office。提前致谢。

4

2 回答 2

1

可能不是您正在寻找的答案,但请看一下这个 SO 问题: 尝试使用 Excel 2007 进行办公自动化,但继续使用 Excel 2003

于 2010-11-04T18:30:45.597 回答
1

您可以在 Codeplex 上为您的 xlsx 文档使用ExcelPackage 。那么就没有必要或使用互操作了。他们有用于读取和写入 xlsx 文件的示例代码。

这样您就可以继续使用 2003 的互操作,而不会受到干扰。

如果您需要在两个版本中使用互操作,您应该在单独的 AppDomain 中使用每个版本加载程序集,以便将它们分开。

于 2010-11-04T18:36:42.993 回答