使用C#代码打开Excel工作簿时出现错误
问题描述:
我试图打开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。
答
如果您尝试使用System.Reflection.Missing.Value而不是Type.Missing,该怎么办?
问候,
M.
答
您使用哪一类?
Microsoft.Office.Interop.Excel.ApplicationClass
如果然后尝试将其更改为
Microsoft.Office.Interop.Excel.Application
答
(对不起,我回答这个老问题,但它是谷歌的结果#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
它是什么类型的应用程序?控制台应用? asp.net/winforms? – shahkalpesh 2009-11-09 09:51:16
Asp.net应用程序 – Amrita 2009-11-09 10:03:42