2009-11-09 141 views
8

我試圖打開Excel工作簿並嘗試在其中獲取工作表。 Excelapp.workbooks.Open線從HRESULT拋出一個異常,如使用C#代碼打開Excel工作簿時出現錯誤

System.Runtime.InteropServices.COMException:在Microsoft.Office.Interop.Excel.Workbooks.Open 0x800A03EC

這裏是我的代碼:

Excel.Application excelApp = new Excel.ApplicationClass(); 
Excel.Workbook excelWorkbook = excelApp.Workbooks.Open(strWBPath, 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, true); 

StrWbPath是我的Excel位置。我指的是2007年的Excel,並添加了版本12.0.0.0的Microsoft.office.interop.excel。

+0

它是什麼類型的應用程序?控制檯應用? asp.net/winforms? – shahkalpesh 2009-11-09 09:51:16

+0

Asp.net應用程序 – Amrita 2009-11-09 10:03:42

回答

0

如果您嘗試使用System.Reflection.Missing.Value而不是Type.Missing,該怎麼辦?

問候,

M.

0

您使用哪一類?

Microsoft.Office.Interop.Excel.ApplicationClass 

如果然後嘗試將其更改爲

Microsoft.Office.Interop.Excel.Application 
5

(對不起,我回答這個老問題,但它是谷歌的結果#1這個問題,正確的答案是丟失)。

發生該錯誤是因爲excel認爲工作簿已損壞。當打開Excel文件時,最後一個參數告訴excel如何處理這種情況。通過Microsoft.Office.Interop.Excel.XlCorruptLoad.xlExtractData指示它檢索數據(這將打開一個彈出窗口,告訴用戶如果文件損壞,excel試圖提取數據)。

但是,我注意到,如果您嘗試打開的工作簿具有與您的excel不同的語言環境(使用其他語言設置保存在計算機上),或者您的系統沒有en-us語言環境組。

雖然這非常愚蠢,但很容易克服。對我來說,解決的辦法是隻設置當前區域設置爲EN-US打開文件之前:

static System.Globalization.CultureInfo oldCI; 
oldCI = System.Threading.Thread.CurrentThread.CurrentCulture; 
System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("en-US"); 
xlWorkBook = xlApp.Workbooks.Open(filePath, 0, true, 5, "", "", true, Microsoft.Office.Interop.Excel.XlPlatform.xlWindows, "\t", false, false, 0, true, 1, Microsoft.Office.Interop.Excel.XlCorruptLoad.xlExtractData); 
System.Threading.Thread.CurrentThread.CurrentCulture = oldCI; 

歸功於this page

相關問題