如何在C#程序中使用特定版本的Excel

时间:2009-09-18 07:24:34

标签: c# excel-2007 excel-2003 versions

出于多种原因,我已经在我的笔记本电脑上安装了MSExcel 2003和MSExcel 2007.我需要两个版本来为每个版本(文档级项目和应用程序级项目)开发特定项目。 现在我需要做一个WinForm项目,打开一个Excel文件,读取一个CustomXMLParts并编写一个新的Excel文件。我正在使用Microsoft.Office.Interop.Excel的引用,它使用.. \ Visual Studio工具用于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.Thanks提前。

2 个答案:

答案 0 :(得分:1)

可能不是您正在寻找的答案,但请看一下这个问题: Trying to do Office Automation with Excel 2007, but keeps using Excel 2003

答案 1 :(得分:1)

您可以在Codeplex上使用ExcelPackage作为xlsx文档。然后没有必要或使用互操作。他们有用于读写xlsx文件的示例代码。

通过这种方式,您可以继续使用interop for 2003而不会干扰它们。

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