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]