返回列表 上一主題 發帖

以ado方式,將csv檔放進陣列中出錯?(當中有英文字母)

以ado方式,將csv檔放進陣列中出錯?(當中有英文字母)

小弟的csv檔如下:
5        5922        11.85        0        2,000
7        5926        11.9        5,000        7,000
9        6162        11.8        1,000        0
11        616K        11.9        1,000        0
13        700I        11.75        2,000        0
15        700I        11.9        1,000        0

每列的第二個是英文與數字組成,其都是數字
如果以平常的方法放在sheet上,沒有問題
若將檔案放在陣列中,則第二個會出現空值,有時候也會顯示null
有什麼方法可以讓它,不會出現空值而且可以放進陣列中呢?

會想要用這個方法是想要加速處理數千張csv,如果放在表格上速度差上一段

我覺得關鍵在這句話:
strcon = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & strPath & ";Extended Properties=""text;HDR=no;IMEX=1;FMT=Delimited(,)"";"..

請幫忙

附上檔案



temp.zip (105.74 KB)

http://club.excelhome.net/forum.php?mod=viewthread&tid=267031&pid=7230582&page=1&extra=#pid7230582
在網上找啊找,終於找到一個同樣問題的解答,按照最後的註冊表設置,問題總算是解決了。
網文如下:
連接字符串:
(1)ODBC:connstr="Driver={Microsoft Text Driver (*.txt; *.csv)};Dbq=d:\data\;Extensions=asc,csv,tab,txt;"
(2)OLEDB:connstr="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=d:\;Extended Properties=""text;HDR=Yes;FMT=Delimited"""
注意:
<1>路徑,即dbq或data source,只到目錄一級,不指定文件名(在sql語句中指定)
<2>HDR=YES,表示數據的第一行作為表的標題行,也就是列名,可以用這些列名來篩選數據

注意,連接串裡有IMEX=1,還不夠,還得修改註冊表,將ImportMixedTypes設置為Text才行。

Jet 和 ODBC 提供程序將返回佔多數的類型的數據,但對於佔少數的數據類型,則會返回 NULL(空)值

找了一天終於解決我的問題!謝謝excel home論壇
不過要修正一下

註冊表分32與64位元

附上我成功修改的畫面

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\4.0\Engines\Text\Format


HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Jet\4.0\Engines\Text

TOP

本帖最後由 joey0415 於 2013-10-7 19:47 編輯

回復 3# c_c_lai

我自己試的結果是,querytable後它後放在cells上,一格一個放好

之前我也是這樣做,沒有文字問題,沒有null問題

我的想法是,如果可以打開csv檔,並且直接放在陣列中會比較快

因為前面兩個方法,最後都要放進資料庫中

可能還有其它好方法,不過目前我只會這兩招

如果有更好的方法請提供一下…

=========================
以QT方法後從CELLS放進資料庫
以ADO後放進陣列後,再轉進資料庫

前者:1500個CSV  花費1800~2000秒
後者:1500個CSV  花費1000~1100秒

如果有高手請多關照…
謝謝

TOP

剛剛又試了三次,第二種方法平均只要600多秒!超快!

TOP

        靜思自在 : 原諒別人就是善待自己。
返回列表 上一主題