Microsoft Jet数据库引擎找不到对象'Sheet1 $ _'

我正在从Excel文件读取数据。 当我读取正常的Excel文件时,它工作正常,但是当我读取一个具有如下所示列的Excel文件时,它不会find工作表并给出一个exception –

Microsoft Jet数据库引擎找不到对象'Sheet1 $ _'。 确保对象存在,并且正确拼写其名称和path名称。 在这里输入图像说明

我的代码读取excel是 –

private static DataTable getExcelData(string ExcelPath) { OleDbConnection con; string connectionString; string[] pathArray = ExcelPath.Split('.'); var Extention = pathArray[pathArray.Length - 1]; if (Extention == "xlsx") //read a 2007 file connectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + ExcelPath + ";Extended Properties=\"Excel 8.0;HDR=YES;\""; else //read a 97-2003 file connectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + ExcelPath + ";Extended Properties=Excel 8.0;"; con = new OleDbConnection(connectionString); if (con.State == ConnectionState.Closed) { con.Open(); } DataTable dbSchema = con.GetOleDbSchemaTable(OleDbSchemaGuid.Columns, null); var firstSheetName = dbSchema.Rows[0]["TABLE_NAME"]; OleDbDataAdapter cmd = new OleDbDataAdapter("select * from [" + firstSheetName + "] Where NOT [Event Code]=''", con); DataSet ds = new DataSet(); cmd.Fill(ds); con.Close(); return ds.Tables[0]; } } 

我必须得到周一,周二等所有的列

GetOleDbSchemaTable还会返回Excel文件中隐藏的表格:通常像Sheet1$_这样的名称表示在Sheet1$上应用筛选器时创build的隐藏表格。

您需要更改代码:search以$结尾的表以设置firstSheetName

请注意, OLEDB不保留在Excel中的图表顺序 。

另外请注意,您需要这样做来读取带有多行标题的excel文件:

  • 在连接string的EXTENDED PROPERTIES中设置HDR=No
  • 指定列名称并在您的OleDbCommand中select范围以跳过前两行

例如:

 SELECT [F1] AS Location, [F2] AS EmpId, [F3] AS EmpName, [F4] AS MondayShift, [F5] AS Monday15Min, [F6] AS Monday30Min, [F7] AS Monday15Min2 FROM [Sheet1$A3:G]