摘要:Get Excel From OleDB ,用OleDB取得Excel資料
最近剛好在做~Excel的匯入匯出~~
那最快的方式當然就是用OledDB去存取~~
以以下方式讀取
private DataTable GetDataFromExcel(string filePath)
{
string strCon = @" Provider = Microsoft.Jet.OLEDB.4.0 ; Data Source =" + filePath + ";Extended Properties=\"Excel 8.0;HDR=YES;IMEX=1;\"";
OleDbConnection objConn = new OleDbConnection(strCon);
OleDbDataAdapter odda = new OleDbDataAdapter("Select * from [Sheet1$]", objConn);
DataTable dt = new DataTable();
odda.Fill(dt);
return dt;
}
{
string strCon = @" Provider = Microsoft.Jet.OLEDB.4.0 ; Data Source =" + filePath + ";Extended Properties=\"Excel 8.0;HDR=YES;IMEX=1;\"";
OleDbConnection objConn = new OleDbConnection(strCon);
OleDbDataAdapter odda = new OleDbDataAdapter("Select * from [Sheet1$]", objConn);
DataTable dt = new DataTable();
odda.Fill(dt);
return dt;
}
這方式可讀出選定的Excel中的Sheet1中的資料~並排除掉第一列
其實這方法很多人都用過~
但昨天發生一個問題~~
我轉出來的DataTable中~會有幾個欄位會是空白的~~但Excel中明明就是有值的~
一直很納悶~~
後來仔細了研究一下~~
當你使用OleDB去做讀取的時候~
Excel中的儲存格格式在同一欄中必須一致,利如此欄位設定是以數字為主~~你就必須讓這整欄的儲存格格式都是數字
因為它有個特殊個性質~~
就是他會以此欄位中大部分的格式為此欄位格式~~
例如~你此欄位中有十列是數值格式~有五列是字串格式~~那你在轉讀取資料時他就會是數值格式~~然後那五列就會讀不到~
所以~~~當在製作這Excel時,請注意這問題~~欄位型態請都設成一樣的~~
PS.OLEDB讀取Excel在X64的是系統是無效的~~X64不支援Microsoft.Jet.OLEDB.4.0