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

C# 使用C代码打开excel工作簿时出错,c#,excel-2007,C#,Excel 2007,我正在尝试打开一个excel工作簿,并尝试在其中获取一个工作表。Excelapp.workbooks.Open line作为 System.Runtime.InteropServices.ComeSult中的异常:0x800A03EC位于Microsoft.Office.Interop.Excel.Workbooks.Open 这是我的密码: Excel.Application excelApp = new Excel.ApplicationClass(); Excel.Workbook exc

我正在尝试打开一个excel工作簿,并尝试在其中获取一个工作表。Excelapp.workbooks.Open line作为

System.Runtime.InteropServices.ComeSult中的异常:0x800A03EC位于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

如果尝试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;

功劳归

如果它能帮助别人,我在这件事上浪费了很多时间。我正在传递所有文件的CorruptedLoad参数的
Microsoft.Office.Interop.Excel.XlCorruptLoad.xlRepairFile
,认为这意味着“打开文件,如果文件已损坏,请尝试修复”。这适用于大多数文件

但是,对于某些文件,我仍然得到异常(来自HRESULT:0x800A03EC的异常)。但是,如果您在Excel中手动打开该文件,它不会损坏


事实证明,对于这些文件,您不能提供CorruptedLoad参数。然后它成功地打开了。因此,最后我调整了代码,使其首先在没有任何CorruptedLoad参数的情况下进行尝试,并且仅当该参数返回异常时,才尝试为该参数传递xlRepairFile。我还调整了对该参数的理解,使其意思是“打开并修复此文件,无论其是否损坏”。

它是什么类型的应用程序?控制台应用程序?asp.net/winforms?