2011-04-28 128 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