須要引用:using System.Data.OleDb;ide
/// <summary> /// 獲取Excel數據,包含全部sheet /// </summary> /// <param name="fullPath"></param> /// <returns></returns> public DataSet GetExcelTables(string fullPath) { DataSet ds = new DataSet(); if (File.Exists(fullPath)) { //HDR=No 第一行就是數據 string strConn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + fullPath + ";Extended Properties='Excel 12.0;HDR=No;IMEX=1;'"; using (OleDbConnection conn = new OleDbConnection(strConn)) { conn.Open(); foreach (DataRow item in conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null).Rows) { string tableName = item[2].ToString().Trim(); DataTable dt = new DataTable(); dt.TableName = tableName; OleDbDataAdapter odda = new OleDbDataAdapter("select * from [" + tableName + "]", conn); odda.Fill(dt); ds.Tables.Add(dt); } } } return ds; }
Excel有兩種格式:.xls(office2003) 和 .xlsx(office2007),xlsx須要用12.0的驅動,ui
下載地址:http://download.microsoft.com/download/7/0/3/703ffbcb-dc0c-4e19-b0da-1463960fdcdb/AccessDatabaseEngine.exespa
.xlsx(office2007)鏈接字符串:Provider=Microsoft.ACE.OLEDB.12.0;Data Source=表格絕對路徑;Extended Properties='Excel 12.0;HDR=No;IMEX=1;'code
.xls(office2003)鏈接字符串:Provider=Microsoft.Jet.Oledb.4.0;Data Source=表格絕對路徑;Extended Properties='Excel 8.0;HDR=YES;IMEX=1;'blog
說明:HDR=No,意思是表格中的第一行就是數據,不是表頭,系統會自動生成列;HDR=Yes,意思是表格中的第一行是表頭,系統會把第一行當作DataTable的列名。字符串
當 IMEX=0 時爲「匯出模式」,這個模式開啓的 Excel 檔案只能用來作「寫入」用途。
當 IMEX=1 時爲「匯入模式」,這個模式開啓的 Excel 檔案只能用來作「讀取」用途。
當 IMEX=2 時爲「連結模式」,這個模式開啓的 Excel 檔案可同時支援「讀取」與「寫入」用途。
特別注意:IMEX=1的時候,讀取Excel的時候會把科學計數法的數字自動轉字符串,我就被這個地方坑了一下,致使我老是讀不到對的數據。
string