string strCon = "Provider=Microsoft.ACE.OLEDB.12.0;data source=" + filePath + ";Extended Properties='Excel 12.0;HDR=Yes;IMEX=1'";
//Excel 2007文件
Provider=Microsoft.Jet.OleDb.4.0;data source=" + filePath + ";Extended Properties='Excel 8.0;HDR=Yes;IMEX=1'";
//Excel 2003文件
Jet 引擎,可以訪問Office97-2003,但不能訪問 Office 2007。
ACE 引擎,是隨Office2007一起發布的數據庫連接組件,既可以訪問 Office 2007,也可以訪問Office97-2003。
另外:Microsoft.ACE.OLEDB.12.0 可以訪問正在打開的 Excel 文件,而 Microsoft.Jet.OLEDB.4.0 是不可以的。
HDR 表示第一行是否是標題行。
- 若為 YES,則第一行是標題行(即列名稱),不是數據;
- 若為 NO,則第一行不是標題行,跟后面的行一樣,是數據。
IMEX 表示混合數據類型時如何處理。
- 若為 0,則為輸出模式,此情況下只能用作寫入 Excel;
- 若為 1,則為輸入模式,此情況下只能用作讀取 Excel,並且始終將 Excel 數據作為文本類型讀取;
- 若為 2,則為連接模式,此情況下既可用作寫入、也可用作讀取。
Excel 第一行第一列可以存儲字符串,第二行第一列又可以存儲數字……同樣的列,存儲不同的數據類型,這就形成了混合數據類型。
所以若要讀取混合數據類型,應該將 IMEX 設置為 1;若誤設置為 0,則讀取不到任何行;若誤設置為 2 或省略,則有些數據讀取出來是空白。
ps:IMEX=1只確保在某列前8行數據至少有一個是文本項的時候才起作用,它只是把查找前8行數據中數據類型占優選擇的行為作了略微的改變。例如某列前8行數據全為純數字,那么它仍然以數字類型作為該列的數據類型,隨后行里的含有文本的數據仍然變空。