使用程式通路Excel檔案時,如果檔案是标準的Excel檔案格式,可以使用com元件進行通路,也可以将Excel檔案當做資料庫檔案通路
com元件通路的好處是顯而易見的,可以對Excel裡的單元格進行讀取,也可以進行修改,同時也帶來一個問題就是通路速度慢。
用資料庫的方式來通路,好處就是簡單快捷,缺點就是隻能操作資料,無法操作格式。
但是很多時候我們可能僅僅隻是想要做資料讀取出來進行統一整理,這個時候采用資料庫通路的方式就更加快捷。
資料庫通路的具體代碼随便都可以搜到,不再細說,将Excel當作資料庫檔案通路,也隻是資料庫連接配接字元串不同而已,标準的連接配接字元串:
Excel2003:
Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\1.xls;Extended Properties=“Excel 8.0;HDR=YES;”;
Excel2007:
Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\1.xlsx;Extended Properties=“Excel 12.0 Xml;HDR=YES”;
很多時候,這樣做就可以進行讀取了。
但是我在使用的時候确發現很多列的資料讀取部分正常,部分丢失。
Excel當做資料庫通路的時候,有一個自動推斷的功能,會根據Excel裡前幾行的資料來推斷列的資料格式,如果後面的單元格裡存在類型不一緻的情況,這時就可能會發生讀取不到資料的情況。
解決辦法: 在連接配接字元串後面加上一個屬性
Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\1.xls;Extended Properties=“Excel 8.0;HDR=YES;IMEX=1”;
具體更詳細的說明:
IMEX(IMport EXport mode):
IMEX是用來告訴驅動程式使用Excel檔案的模式,其值有0、1、2三種,分别代表導出、導入、混合模式。當我
們設定IMEX=1時将強制混合資料(數字、日期、字元串等)轉換為文本。
但僅僅這種設定并不可靠,IMEX=1隻確定在某列前8行資料至少有一個是文本項的時候才起作用,它隻是把查
找前8行資料中資料類型占優選擇的行為作了略微的改變。例如某列前8行資料全為純數字,那麼它仍然以數字
類型作為該列的資料類型,随後行裡的含有文本的資料仍然變空。另一個改進的措施是IMEX=1與系統資料庫值
TypeGuessRows配合使用,TypeGuessRows 值決定了ISAM 驅動程式從前幾條資料采樣确定資料類型,預設為“8
”。
可以通過修改“HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\4.0\Engines\Excel”下的該系統資料庫值來更改采
樣行數,設定為0時表示采樣所有行。
IMEX 三種模式:
當 IMEX=0 時為“彙出模式”(Export mode),該模式開啟的Excel檔案隻能用來做“寫入”用途。
當 IMEX=1 時為“彙入模式”(Import mode),該模式開啟的Excel檔案隻能用來做“讀取”用途。
當 IMEX=2 時為“連結模式”(Linked mode),該模式開啟的Excel檔案支援“讀取”和“寫入”用途。