狠狠色丁香婷婷综合尤物/久久精品综合一区二区三区/中国有色金属学报/国产日韩欧美在线观看 - 国产一区二区三区四区五区tv

LOGO OA教程 ERP教程 模切知識交流 PMS教程 CRM教程 開發文檔 其他文檔  
 
網站管理員

OLEDB讀取EXCEL表格時,某些字段為空,怎么辦?

admin
2018年2月9日 0:51 本文熱度 7856

轉載:http://blog.sina.com.cn/s/blog_53864cba01011cbn.html

前些日子,寫了一個Excel導入數據庫的共同Batch,突然有一天發現當我修改Excel某一列的值的時候突然讀不出來值了.奇怪之余,做了一些調研.

原來如此:

當我們用OleBb讀取Excel的時候,如果沒有配置IMEX=1的屬性,微軟的處理機制是將列轉換為同一類型來讀取的.例如你在第一行寫的數字格式,而第二行寫的字符格式,就會出現某些列有值卻讀不出來.其實問題也很簡單,如果知道問題所在的話.屬性設置為"IMEX=1"即可

讀取excel數據 到 datagrid 出現:找不到可安裝的ISAM 錯誤: 
實在沒有辦法了 就仔細的查看了 一下數據鏈接字符串: 
String sConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + Server.MapPath(strExcelPath) + ";Extended Properties=Excel 8.0;HDR=Yes;IMEX=1;";最后發現“單引號”漏了。 
改為: 
String sConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + Server.MapPath(strExcelPath) + ";Extended Properties=''Excel 8.0;HDR=Yes;IMEX=1;''"; 就ok了

如果office是2007 那么 Provider=Microsoft.Jet.OLEDB.4.0 修改為Provider=Microsoft.Jet.OLEDB.12.0

當我們設置IMEX=1時將強制混合數據轉換為文本,但僅僅這種設置并不可靠,IMEX=1只確保在某列前8行數據至少有一個是文本項的時候才起作用,它只是把查找前8行數據中數據類型占優選擇的行為作了略微的改變。例如某列前8行數據全為純數字,那么它仍然以數字類型作為該列的數據類型,隨后行里的含有文本的數據仍然變空。 另一個改進的措施是IMEX=1與注冊表值TypeGuessRows配合使用,TypeGuessRows 值決定了ISAM 驅動程序從前幾條數據采樣確定數據類型,默認為“8”。可以通過修改“HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\4.0\Engines\Excel”下的該注冊表值來更改采樣行數。但是這種改進還是沒有根本上解決問題,即使我們把IMEX設為“1”,TypeGuessRows設得再大,例如1000,假設數據表有1001行,某列前1000行全為純數字,該列的第1001行又是一個文本,ISAM驅動的這種機制還是讓這列的數據變成空。 
產生這種問題的根源與Excel ISAM[3](Indexed Sequential Access Method,即索引順序存取方法)驅動程序的限制有關,Excel ISAM 驅動程序通過檢查前幾行中實際值確定一個 Excel 列的類型,然后選擇能夠代表其樣本中大部分值的數據類型[4]。也即Excel ISAM查找某列前幾行(默認情況下是8行),把占多的類型作為其處理類型。例如如果數字占多,那么其它含有字母等文本的數據項就會置空;相反如果文本居多,純數字的數據項就會被置空。 現具體分析在第1節程序代碼Extended Properties項中的HDR和IMEX所代表的含義。HDR用來設置是否將Excel表中第一行作為字段名,“YES”代表是,“NO”代表不是即也為數據內容;IMEX是用來告訴驅動程序使用Excel文件的模式,其值有0、1、2三種,分別代表導出、導入、混合模式解決方法 從以上的分析中可以得知,當某列數據中含有混合類型時,在.NET中使用Microsoft.Jet.OLEDB.4.0來讀取Excel文件造成數據丟失是不可避免的,要解決這個問題只能考慮采用其它數據讀取方法。 在.NET中讀取Excel文件的另外一種方法是回到使用傳統COM組件,這種方法在很多技術文章或論文中都有涉及,本文不作贅述。需要指出的是,使用COM組件來讀取Excel文件數據的效率較低,在作釋放的時候有可能碰到不可預知的錯誤,特別開發Web應用的程序應該慎重使用。 本文提出另外一種利用讀取CSV純文本格式解決此問題的方法。

(1)在讀取Excel的.xls類型的文本數據之前,先將其轉換為.csv格式,在Excel中直接另存為這種格式就可以達到轉換的目的。CSV文件又稱為逗號分隔的文件,是一種純文本文件,它以“,”分隔數據列,本文表1的數據表用CSV格式存儲后用純文本編輯器打開的表現形式如表3所示。 表3 采用CSV格式保存的表1數據 需要指出的是,CSV文件也可以用Ole DB或ODBC的方式讀取,但是如果采用這些方式讀取其數據又會回到丟失數據的老路上,ISAM機制同樣會發揮作用。

(2)采用普通的讀取文本文件的方法打開文件,讀取第一行,用“,”作為分隔符獲得各字段名,在DataTable中創建對應的各字段,字段的類型可以統一創建成“String”。


該文章在 2018/2/9 0:51:13 編輯過
關鍵字查詢
相關文章
正在查詢...
點晴ERP是一款針對中小制造業的專業生產管理軟件系統,系統成熟度和易用性得到了國內大量中小企業的青睞。
點晴PMS碼頭管理系統主要針對港口碼頭集裝箱與散貨日常運作、調度、堆場、車隊、財務費用、相關報表等業務管理,結合碼頭的業務特點,圍繞調度、堆場作業而開發的。集技術的先進性、管理的有效性于一體,是物流碼頭及其他港口類企業的高效ERP管理信息系統。
點晴WMS倉儲管理系統提供了貨物產品管理,銷售管理,采購管理,倉儲管理,倉庫管理,保質期管理,貨位管理,庫位管理,生產管理,WMS管理系統,標簽打印,條形碼,二維碼管理,批號管理軟件。
點晴免費OA是一款軟件和通用服務都免費,不限功能、不限時間、不限用戶的免費OA協同辦公管理系統。
Copyright 2010-2025 ClickSun All Rights Reserved