以ado方式,將csv檔放進陣列中出錯?(當中有英文字母)
暱稱: joey0415
中學生
- 帖子
- 361
- 主題
- 57
- 精華
- 0
- 積分
- 426
- 點名
- 0
- 作業系統
- win7
- 軟體版本
- 2003,2010
- 閱讀權限
- 20
- 性別
- 男
- 註冊時間
- 2010-5-13
- 最後登錄
- 2022-12-8
|
以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)
|
|
|
|
|
|
|
暱稱: joey0415
中學生
- 帖子
- 361
- 主題
- 57
- 精華
- 0
- 積分
- 426
- 點名
- 0
- 作業系統
- win7
- 軟體版本
- 2003,2010
- 閱讀權限
- 20
- 性別
- 男
- 註冊時間
- 2010-5-13
- 最後登錄
- 2022-12-8
|
2#
發表於 2013-10-7 17:58
| 只看該作者
|
|
|
|
|
|
- 帖子
- 2035
- 主題
- 24
- 精華
- 0
- 積分
- 2031
- 點名
- 0
- 作業系統
- Win7
- 軟體版本
- Office2010
- 閱讀權限
- 100
- 性別
- 男
- 註冊時間
- 2012-3-22
- 最後登錄
- 2024-2-1
|
3#
發表於 2013-10-7 18:57
| 只看該作者
回復 2# joey0415
提供你參考:- Sub CSV_Import()
- Dim ws As Worksheet, strFile As String
- Sheets("檔案名稱").Select
- Cells.Clear
-
- Set ws = ActiveSheet 'set to current worksheet name
- ' strFile = Application.GetOpenFilename("Text Files (*.csv),*.csv", , "Please select text file...")
- ' 你也可以直接指定檔案名稱
- strFile = ThisWorkbook.Path & "\9962.csv"
- With ws.QueryTables.Add(Connection:="TEXT;" & strFile, Destination:=ws.Range("A1"))
- .TextFileParseType = xlDelimited
- .TextFileCommaDelimiter = True
- .Refresh
- End With
- End Sub
複製代碼 |
|
|
|
|
|
|
- 帖子
- 2035
- 主題
- 24
- 精華
- 0
- 積分
- 2031
- 點名
- 0
- 作業系統
- Win7
- 軟體版本
- Office2010
- 閱讀權限
- 100
- 性別
- 男
- 註冊時間
- 2012-3-22
- 最後登錄
- 2024-2-1
|
4#
發表於 2013-10-7 19:37
| 只看該作者
回復 1# joey0415 - Sub CSV_Import()
- Dim ws As Worksheet, strFile As String, i As Long
- Dim arr
-
- Sheets("檔案名稱").Select
- Cells.Clear
-
- Set ws = ActiveSheet 'set to current worksheet name
- ' strFile = Application.GetOpenFilename("Text Files (*.csv),*.csv", , "Please select text file...")
- ' 你也可以直接指定檔案名稱
- strFile = ThisWorkbook.Path & "\9962.csv"
- With ws.QueryTables.Add(Connection:="TEXT;" & strFile, Destination:=ws.Range("A1"))
- .TextFileParseType = xlDelimited
- .TextFileCommaDelimiter = True
- .Refresh
- End With
-
- arr = Range("A1:E" & Range("A" & Rows.Count).End(xlUp).Row)
- For i = LBound(arr, 2) To UBound(arr, 1)
- Debug.Print arr(i, 1) & ","; arr(i, 2) & ", " & arr(i, 3) & ", " & arr(i, 4) & ", " & arr(i, 5) & ";"
- Next i
- End Sub
複製代碼 |
|
|
|
|
|
|
暱稱: joey0415
中學生
- 帖子
- 361
- 主題
- 57
- 精華
- 0
- 積分
- 426
- 點名
- 0
- 作業系統
- win7
- 軟體版本
- 2003,2010
- 閱讀權限
- 20
- 性別
- 男
- 註冊時間
- 2010-5-13
- 最後登錄
- 2022-12-8
|
5#
發表於 2013-10-7 19:45
| 只看該作者
本帖最後由 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秒
如果有高手請多關照…
謝謝 |
|
|
|
|
|
|
暱稱: joey0415
中學生
- 帖子
- 361
- 主題
- 57
- 精華
- 0
- 積分
- 426
- 點名
- 0
- 作業系統
- win7
- 軟體版本
- 2003,2010
- 閱讀權限
- 20
- 性別
- 男
- 註冊時間
- 2010-5-13
- 最後登錄
- 2022-12-8
|
6#
發表於 2013-10-7 21:16
| 只看該作者
剛剛又試了三次,第二種方法平均只要600多秒!超快! |
|
|
|
|
|
|