使用 Microsoft.Jet.OLEDB.4.0 讀取 Excel 時,若某欄位前幾列為純數字、後續混入文字,會導致文字資料讀成 null。根因在於 OLEDB 驅動程式預設只掃描前 8 列(TypeGuessRows=8)推斷資料型別,若掃描範圍內數字佔多數,整欄就被判定為數值型,不符合的文字便捨棄為空值。
IMEX=1 與 HDR=YESstring strConn = @"Provider=Microsoft.Jet.OLEDB.4.0;
Data Source=" + _physicalPath + @";
Extended Properties='Excel 8.0;HDR=YES;IMEX=1';";
TypeGuessRows 為 0(掃描全欄)路徑:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\4.0\Engines\Excel\TypeGuessRows
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Jet\4.0\Engines\Excel\TypeGuessRows。驅動程式採樣邏輯:
DBNull.Value。範例:前 8 列有 5 數字 + 3 文字 → 判定為數字欄 → 後面文字全變 null。
.xlsx、型別控制彈性高。.xlsx,連接字串 Provider=Microsoft.ACE.OLEDB.12.0;Extended Properties='Excel 12.0 Xml;HDR=YES;IMEX=1;'。IMEX=1?TypeGuessRows=0?套用上述兩步驟,即可解決 90% 以上的 Excel 匯入空值問題。