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