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

时间:2017-07-03 12:49:37

标签: c# excel oledb

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

        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(它正在给出错误),它不会产生任何异常,而是平滑地读取excel。 / p>

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

1 个答案:

答案 0 :(得分:1)

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