C#exception:外部表格不是预期的格式。 而使用excel与oledb

如果有人能帮助我,这将是非常感激的。 我正在尝试阅读具有不同工作表的Excel(.xlsx,excel-2007)(标题不固定)。 下面的代码在大多数情况下适用于我,但在有些情况下会抛出exception。

public static bool ReadExcelData(string ExcelFilePath, string SheetName, out DataTable dt) { dt = new DataTable(); bool isXlsx = ExcelFilePath.Substring(ExcelFilePath.LastIndexOf('.') + 1).ToLower() == "xlsx"; string excelConnectString = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" + ExcelFilePath + ";Extended Properties=\"Excel 8.0;HDR=yes;\""; if (isXlsx) excelConnectString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + ExcelFilePath + ";Extended Properties=\"Excel 12.0\";"; OleDbConnection objConn = null; try { objConn = new OleDbConnection(excelConnectString); if (objConn.State == ConnectionState.Closed) { objConn.Open(); dt = objConn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null); } } catch (Exception ex) { dt = null; return false; } try { dt.Clear(); string query = "select * from ["+SheetName+"$] "; OleDbCommand objCmd = new OleDbCommand(query, objConn); OleDbDataAdapter objDatAdap = new OleDbDataAdapter(); objDatAdap.SelectCommand = objCmd; objDatAdap.Fill(dt); Boolean result = (dt.Rows.Count >= 1) ? true : false; objConn.Close(); return true; } catch (Exception ex) { dt = null; return false; } } 

如果在例外的情况下,在进入代码之前手动(双击excel)打开这个excel(出错的地方),它不会产生任何exception,而是顺利地读取excel。

什么可以是更好的或替代的方式,以便它可以适用于所有的情况?

问题是在你的Excel表格中,而不是在你的代码中,请再次以.xls或.xlsx格式保存你的Excel表格,然后使用相同的代码。 它会工作。