使用C#代码打开Excel工作簿时出错

Amr*_*ita 8 c# excel-2007

我正在尝试打开一个excel工作簿并尝试在其中获取工作表.Excelapp.workbooks.Open行正在抛出异常

来自HRESULT的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);
Run Code Online (Sandbox Code Playgroud)

StrWbPath是我的Excel位置.我正在引用2007 excel并添加了版本12.0.0.0的Microsoft.office.interop.excel.

hot*_*e42 7

(很抱歉回答这个老问题,但是这个问题的谷歌结果#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;
Run Code Online (Sandbox Code Playgroud)

信用转到此页面


Mic*_*len 0

如果您尝试 System.Reflection.Missing.Value 而不是 Type.Missing 会怎样?

问候,

M。