2011-04-28 87 views
0

我有一个C#WPF应用程序,它使用Excel互操作库来生成和打开Excel表。这对于使用Office 2003的XP计算机来说工作得很好。但是我最近将它迁移到运行Excel 2007的Windows 2007计算机上。现在我的excel出口不再适用了。它抛出类似如下的错误:在2007年打开excel时出错

System.Runtime.InteropServices.COMException (0x800A03EC): The document is corrupt and cannot be opened. To try and repair it, use the Open and Repair command in the Open dialog box and select Extract Data when prompted. 
    at Microsoft.Office.Interop.Excel.Workbooks.Open(String Filename, Object UpdateLinks, Object ReadOnly, Object Format, Object Password, Object WriteResPassword, Object IgnoreReadOnlyRecommended, Object Origin, Object Delimiter, Object Editable, Object Notify, Object Converter, Object AddToMru, Object Local, Object CorruptLoad) 

我用下面的代码打开我的excel文件..

private void OpenSavedData(string fileName) 
     { 

      var excelApp = new Application(); 
      excelApp.Workbooks.Open(
       fileName, 
       Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, 
       Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing); 
      excelApp.Visible = true; 

      Marshal.ReleaseComObject(excelApp); 
     } 

这有没有问题Office 2003和XP的工作,但由于某种原因失败在Win7 & Office 2007.请你能让我知道任何可能的解决方法/解决方案吗?

感谢, -Mike

+0

您可以传递一个参数(在'Open'中)告诉它是Office 2003文档吗? – Marco 2011-04-28 08:51:22

回答

1

我自己看到了同样的问题,当我升级到Windows 7.也许这是我的WPF代码在64位环境中运行的突然震动......我'米不确定!

我的解决方案有点激烈。我重写了我的WPF应用程序完全“导出到Excel”代码,以使用OpenXML库,而不是使用VSTO库(它总是为我的.Net应用程序添加一个不稳定的级别)。

我已经证明我所做的事情,以及所有源代码,再加上一个演示,这里提供: http://www.mikesknowledgebase.com/pages/CSharp/ExportToExcel.htm

一旦你在我的图书馆已链接,导出数据集或数据表一样简单作为添加一行代码。

CreateExcelFile.CreateExcelDocument(myDataSet, "C:\\MikesExcelFile.xlsx"); 

它没有那么简单!

希望这会有所帮助。

Mike

4

我想你可能会使用早期与2003年的Excel结合,这就是为什么它不使用Excel 2007工作基本上你需要做的是重新编译应用程序,而引用正确的互操作是什么用于excel 2007的库(Microsoft.Interop.Office.Excel版本1.6,可在装有Office 2007的计算机上的“添加参考” - >“COM”中找到)。 您可以谷歌早期和晚期绑定,以获得更多关于它的信息。这里是一个链接,让你开始:http://peltiertech.com/Excel/EarlyLateBinding.html