2009-11-09 140 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

相关问题