LOGO OA教程 ERP教程 模切知識(shí)交流 PMS教程 CRM教程 開(kāi)發(fā)文檔 其他文檔  
 
網(wǎng)站管理員

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

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

轉(zhuǎn)載:http://blog.sina.com.cn/s/blog_53864cba01011cbn.html

前些日子,寫(xiě)了一個(gè)Excel導(dǎo)入數(shù)據(jù)庫(kù)的共同Batch,突然有一天發(fā)現(xiàn)當(dāng)我修改Excel某一列的值的時(shí)候突然讀不出來(lái)值了.奇怪之余,做了一些調(diào)研.

原來(lái)如此:

當(dāng)我們用OleBb讀取Excel的時(shí)候,如果沒(méi)有配置IMEX=1的屬性,微軟的處理機(jī)制是將列轉(zhuǎn)換為同一類型來(lái)讀取的.例如你在第一行寫(xiě)的數(shù)字格式,而第二行寫(xiě)的字符格式,就會(huì)出現(xiàn)某些列有值卻讀不出來(lái).其實(shí)問(wèn)題也很簡(jiǎn)單,如果知道問(wèn)題所在的話.屬性設(shè)置為"IMEX=1"即可

讀取excel數(shù)據(jù) 到 datagrid 出現(xiàn):找不到可安裝的ISAM 錯(cuò)誤: 
實(shí)在沒(méi)有辦法了 就仔細(xì)的查看了 一下數(shù)據(jù)鏈接字符串: 
String sConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + Server.MapPath(strExcelPath) + ";Extended Properties=Excel 8.0;HDR=Yes;IMEX=1;";最后發(fā)現(xiàn)“單引號(hào)”漏了。 
改為: 
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

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

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

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


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

黄频国产免费高清视频,久久不卡精品中文字幕一区,激情五月天AV电影在线观看,欧美国产韩国日本一区二区
在线中文字幕亚洲日韩日本 | 日本高清中文字幕免费一区二区 | 漂亮人妇中出中文字幕在线 | 日韩欧美国产一区二区三区三州 | 亚洲精品日韩国产 | 日韩丝袜亚洲国产欧美一区 |