[C#] 使用 OleDb 讀取 Excel
紀錄一下一些小細節
在 Visual Studio 2010 中 設定資料連接
設定Extended Properties,我這邊設 Excel 12.0;HDR=NO;IMEX=1
然後按下確定,測試一下連接就行了
當欄位資料中字數被截斷,且資料量不大時,可考慮修改登錄機碼 TypeGuessRows
登錄機碼 TypeGuessRows
指要檢查資料類型的列數。 預設值:8。 TypeGuessRows 的有效範圍值是 0 到 16。 如果設定為 0,是表示掃描來源資料列的筆數是 16384。 使用 0 值,若資料檔又很大時,將造成效能的衝擊。
測試範例,設個中斷點,看一下 DataTable 資料
string provider = "Microsoft.ACE.OLEDB.12.0";
string datasource = System.AppDomain.CurrentDomain.BaseDirectory + @"ProductTest.xlsx";
string extended = "Excel 12.0"; //Excel版本,Excel 8.0 針對Excel2000及以上版本,Excel5.0 針對Excel97
string hdr = "No"; //第一行是否為標題
//當 IMEX=0 時為「匯出模式」,這個模式開啟的 Excel 檔案只能用來做「寫入」用途。Export mode
//當 IMEX=1 時為「匯入模式」,這個模式開啟的 Excel 檔案只能用來做「讀取」用途。Import mode
//當 IMEX=2 時為「連結模式」,這個模式開啟的 Excel 檔案可同時支援「讀取」與「寫入」用途。Linked mode
string imex = "1"; //通知驅動程序始終將「互混」數據列作為文本讀取
string strConn = "Provider="+ provider +
";Data Source=" + datasource +
";Extended Properties=\""+ extended +
";HDR=" + hdr +
";IMEX=" + imex + "\" ";
OleDbDataAdapter oledbada = new OleDbDataAdapter(" SELECT * FROM [日用百貨$]", strConn);
DataTable dt = new DataTable();
oledbada.Fill(dt);
Console.ReadKey();
下載元件
Microsoft Access Database Engine 2010 Redistributable 32bit
Microsoft Access Database Engine 2010 Redistributable 64bit
已經安裝 Access Database Engine 但是出現警告訊息:
Microsoft.ACE.OLEDB.12.0' 提供者並未登入於本機電腦上。
請安裝這個
2007 Office system 驅動程式:資料連線元件
範例程式 下載
參考資料: