vb2005如何快速讀取excel內100列*200欄的資料

2008-03-16 2:05 am
我有一個程式
要讀取excel檔案內
1-100列*1-200欄全部儲存格的資料
到陣列data(100,200)
發現費時約30秒
是否有更快的方法
更新1:

謝謝 worlonzeng 回答! 我用你的方法測試 vb2005無法宣告Dim Mx as variant 是否vb2005有所不同 還是我那裡做錯?????

更新2:

還是?????? 可以宣告 dim mx as Object 但是Mx = Sheet1.[A1:IV200]會有錯誤 是否可以用vb2005的方法 寫出完整的程式 謝謝指導!!!!!

更新3:

Dim Mx 可以宣告 但是 Mx = Sheet1.[A1:IV200]會有錯誤

更新4:

程式如下: Dim i, j As Integer Dim newExcel As New Microsoft.Office.Interop.Excel.Application

更新5:

With newExcel newExcel.Workbooks.Open(Filename:=d:\t1.xls) newExcel.Worksheets.Item(1).activate()

更新6:

For i = 1 To 100 For j = 1 To 200 data(i, j) = newExcel.Cells(i, j).Value Next Next

更新7:

newExcel.ActiveWindow.Close() newExcel.Quit() End With

更新8:

迴圈處理用掉30秒 For i = 1 To 100 For j = 1 To 200 data(i, j) = newExcel.Cells(i, j).Value Next Next 沒錯 是否有更快的方法 等30秒真的很慢

更新9:

另外請教!!!! newExcel.Workbooks.Open(Filename:=d:\t1.xls) 我該如何在開啟 d:\t1.xls 之前 檢查 d:\t1.xls 是否已經開啟中??????

更新10:

如果不是使用中 才能開啟

更新11:

錯誤出現在下面這一行程式 ExApp.workbooks.open("d:\t-1.xls") 我有放檔案在d:\t-1.xls 但執行時找不到檔案位置 我試著修改如下 ExApp.workbooks.open("d:\t-1.xls") 可以正常跑 但花費的時間一樣要30秒

更新12:

只能宣告為string Dim data(i,j) as string 某些儲存格資料為字串 拆開讀取, 時間是一半 感謝幫忙

回答 (4)

2008-03-18 7:47 pm
✔ 最佳答案
您目前怎麼讀取 ?
用迴圈嗎 ?
for i = 1 to 100
for j = 1 to 200
next
next

2008-03-18 11:47:53 補充:
利用陣列 :
Dim Mx as variant
Mx = Sheet1.[A1:IV200]
此時, Mx 即為一個 1 to 200 , 1 to 256 的陣列
msgbox ubound(mx,1)
msgbox ubound(mx,2)

2008-03-19 23:05:40 補充:
改成 :
Dim Mx
試試看

2008-03-20 10:13:50 補充:
試過 Dim Mx 了嗎 ?

Object 不行, 陣列不是物件 ~~

2008-03-21 01:32:38 補充:
上述方法或許只適用於 Excel VBA 中 ...
(直接將儲存格範圍轉為陣列)

介意放上您讀取資料那段的程式碼嗎 ??
容我看看有無他法 ~~

理論上, 讀取 20000 個資料不應用到 30 秒 ~~

2008-03-21 10:11:37 補充:
麻煩確認一下, 30 秒是否絕大部分用在該迴圈

最簡測試法 : 迴圈 前,後 設定中斷點, 便可得知 ~~

2008-03-21 10:13:04 補充:
之後試試以下
With newExcel
For i = 1 To 100
For j = 1 To 200
data(i, j) = .Cells(i, j).Value
Next
Next
END WITH

2008-03-21 10:45:40 補充:
我覺得問題在 :
Excel \ 檔案 \ 工作表 \ 儲存格
這個層級, 工作表被跳過了, 造成速度奇慢 ~~

2008-03-22 17:11:38 補充:
承上, 測試以下 :
Dim ExApp
Set ExApp= CreateObject("excel.application")
ExApp.workbooks.open "c:\test.xls"

with ExApp.worksheets("sheet1")
for i= 1 to 100
for j = 1 to 200
data(i,j)= .cells(i, j)
next
next
end with

2008-03-23 18:43:31 補充:
如果加宣告
Dim data(i,j) as string 呢 ?? 吃記憶體少些 ~~
(猜測 不定型態 20000 個吃去太多記憶體)

如果 Excel 內均為數值
Dim data(i,j) as single 更快

如果 Excel 內均為整數, 則又快於浮點 ~~

2. 再試拆開讀取, 時間是一半還是遠少於一半 :
with ExApp.worksheets("sheet1")
for i= 1 to 50
for j = 1 to 200
data(i,j)= .cells(i, j)
next
next
end with
2015-05-07 9:11 am
我本來從沒遇到過修NAS修硬碟和隨身碟要資料救援,一開始也跟大家一樣總是問價格到處比價,因為不懂,凡事都從價格,考量,輕言聽信朋友介紹比較便宜一家,找錯家之後痛苦尾隨而來,以下省略500字........,後來自己上網找資料救援找到硬碟醫院,和他們經理溝通之後給我正確觀念,這是妳寶貴的資料,妳要考慮是救不救的回問題,而不是貴不貴問題,如果重要請找對人搶救NAS資料硬碟救援才能恢復你的NAS中多顆的硬碟資料
http://www.datamaster.com.tw/
2014-10-06 10:02 am
您期待已久的 8891休閒網 熱烈開幕囉!

8891體育網以優質的服務領先業界

多位美女客服24小時即時線上為您服務!

8891娛樂網有優於市面所有台灣運彩遊戲的 賠 ~ 率

以及免下載美女 百家樂、21點、骰寶、各國賓果、餐廳賓果、彩球遊戲

另有數百位真人視訊聊天辣妹與您進行互動聊天還有"精彩"電影喔!

心動了嗎!! 快來體驗市面上最完質最高品質的服務

現在有開放免費試玩喔! 官網 : 8891.NET
2014-09-06 8:00 am
【亞洲36588合法彩券公司直營 官網: A36588.NET 】

【 最新活動→迎接新會員,首存狂送20% 】

【運動→電子→對戰→現場→彩球 】

【免費服務 →電影區、討論區、KTV歡唱、運動轉播、即時比分、24H客服 】

【亞洲36588合法彩券公司直營 官網: A36588.NET 】


收錄日期: 2021-05-01 23:40:23
原文連結 [永久失效]:
https://hk.answers.yahoo.com/question/index?qid=20080315000016KK08162

檢視 Wayback Machine 備份