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

标签 c# excel-2007

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

System.Runtime.InteropServices.COMException from HRESULT: 0x800A03EC at Microsoft.Office.Interop.Excel.Workbooks.Open

这是我的代码:

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。

最佳答案

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

关于c# - 使用 C# 代码打开 Excel 工作簿时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1699936/

相关文章:

c# - 将结构与 WCF 服务一起使用

c# - 从集合类设置只读属性

c++ - 如何在 C++ 中读取/写入数据到 excel 2007?

excel - 根据众多标准将值相乘

vba - 如何修改文本导入向导 VBA 代码以更改特定列的列数据格式?

c# - 将 MySQL double 导入到 C# 时出现 InvalidCastException

c# - 我可以指定要从哪个类调用虚拟方法吗?

C# 异常 : Does it have an unique value/identifier

c++ - 如何从 C++ 加载项获取 excel 版本

excel-2007 - 如何在 Excel 2007 中关闭 R1C1 引用样式