台灣最大程式設計社群網站
線上人數
971
 
會員總數:243865
討論主題:188351
歡迎您免費加入會員
討論區列表 >> VB.NET >> VB.NET 增加放入到excel的速度與效率
[]  
[我要回覆]
回應主題 加入我的關注話題 檢舉此篇討論 將提問者加入個人黑名單
VB.NET 增加放入到excel的速度與效率
價值 : 200 QP  點閱數:515 回應數:38

樓主

SU
門外漢
0 6
156 29
發送站內信

各位大大 我現在datagridview上面已經有資料匯進來,我是寫一個抓取特定的格式將datagridview的資料匯入到excel裡面去作公式運算
可以請教一下各位大大如何增加其放入到excel工作表表的速度 下面程式的迴圈速度有點慢

舉例: 現在datagridview的資料量是1800筆但是經過下面程式執行 需要15分鐘才跑 完有點久~

之後要放入5萬筆的資料,所以可能1800筆15分鐘有點久

不知道各位大大有沒有什麼方法可以加快其匯入的速度



搜尋相關Tags的文章: [ DataGridView ] , [ VB ] , [ EXCEL ] ,
本篇文章發表於2018-12-26 11:48
別忘捐VP感謝幫助你的人 新手會員瞧一瞧
1樓
回應

roar
檢舉此回應
https://www.automateexcel.com/vba/turn-off-screen-updating/
參考以上網站,可以將screenupdating 關了試試。
Disable Screen Updating
1. At the beginning of your code put this line:
Application.ScreenUpdating = False
本篇文章回覆於2018-12-26 16:00
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
2樓
作者回應

SU
檢舉此回應
不好意思大大我不是用VBA寫
本篇文章回覆於2018-12-26 17:20
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
3樓
回應

練武功
檢舉此回應
若用迴圈一格一格放大筆資料,一定會很慢。
應該採用陣列複製的方式。
xlSheet1.Range("A2").Resize(500, 100).Value = a
a是一個(499,99)的原始資料陣列
本篇文章回覆於2018-12-26 21:51
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
4樓
作者回應

SU
檢舉此回應

是這樣寫嗎大大?
本篇文章回覆於2018-12-27 15:07
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
5樓
回應

練武功
檢舉此回應
不是。
要事先把所有資料存入陣列a,然後執行xlsSht.Range("A2").Resize(500, 100).Value = a (這裡不需要迴圈了,只執行一次就完成)
本篇文章回覆於2018-12-27 16:24
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
6樓
作者回應

SU
檢舉此回應
可以做個範例嗎感謝
本篇文章回覆於2018-12-27 16:49
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
7樓
回應

練武功
檢舉此回應

本篇文章回覆於2018-12-27 17:22
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
8樓
作者回應

SU
檢舉此回應
大大你好
我想要把datagridview的資料存入陣列

在datagridview裡面的資料有

$GPRMC,011500.00,A,2252.59177,N,12012.67282,E,0.000,,250416,,,A*72,12
$GPRMC,011800.00,A,2252.59199,N,12012.67404,E,0.000,,250416,,,A*77,11
$GPRMC,012100.00,A,2252.59196,N,12012.67326,E,0.000,,250416,,,A*75,11
$GPRMC,012400.00,A,2252.59253,N,12012.67260,E,0.000,,250416,,,A*79,10
$GPRMC,012700.00,A,2252.59254,N,12012.67336,E,0.000,,250416,,,A*7F,8
$GPRMC,013000.00,A,2252.59250,N,12012.67248,E,0.000,,250416,,,A*75,9
$GPRMC,013300.00,A,2252.59192,N,12012.67274,E,0.000,,250416,,,A*74,9
$GPRMC,013600.00,A,2252.59236,N,12012.67295,E,0.000,,250416,,,A*73,8
$GPRMC,013900.00,A,2252.59288,N,12012.67339,E,0.000,,250416,,,A*7E,9
$GPRMC,014200.00,A,2252.59211,N,12012.67271,E,0.000,,250416,,,A*7F,9
有文字也有數字..我改成string不行ㄟ


本篇文章回覆於2018-12-27 17:35
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
9樓
回應

練武功
檢舉此回應
微軟沒有規定要一次把所有的欄全部寫進去。
你可以把a陣列設成(499,0)只存某一欄單一類型的資料,複製完在進行下一欄。
本篇文章回覆於2018-12-27 20:16
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
10樓
回應

P陳
檢舉此回應
方法有很多種
1.將畫面關掉不要顯示狀況下放資料進去,儲存完後再顯示,但這效果不太大
XlsApp = CreateObject("Excel.Application")
XlsApp.DisplayAlerts = False
XlsApp.Application.Visible = False <---不顯示
寫至 Excel
XlsApp.Application.Visible = True <---再顯示

2.先轉到 aa.csv 文字檔 再打開 aa.csv (只要先設定 CSV檔是以Excel 開啟即可 (速度 夏夏叫)

3.用 外掛軟體 NPOI (請Google 一下),之前有用過效果還不錯,不過還是以 2 的方式最快。
本篇文章回覆於2018-12-29 14:41
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
11樓
回應

P陳
檢舉此回應
然後練武功建議的方法,應該也是不錯的,只是我沒有用過。
您要試試
本篇文章回覆於2018-12-29 14:43
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
12樓
作者回應

SU
檢舉此回應
大大 您好 我將檔案轉換成CSV 但是速度還是一樣慢
本篇文章回覆於2019-01-15 11:06
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
13樓
回應

P陳
檢舉此回應
請將檔案及您的程式寄給我看一下
寄給我時請告知一下
hi.jcchen@msa.hinet.net
本篇文章回覆於2019-01-15 11:13
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
14樓
回應

P陳
檢舉此回應
目前我猜到您會慢是在將資料放入 Datagridview 的過程。

我試了一下 6萬5000 筆的資料,從硬碟中讀出,再寫到 CSV ,再用Excel 讀入,
約 5 秒內可以完成。
所以請將您的程式PO上來我們看一下。


本篇文章回覆於2019-01-15 11:43
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
15樓
作者回應

SU
檢舉此回應
我寄給您囉 你看一下
本篇文章回覆於2019-01-15 13:14
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
   

回覆
如要回應,請先登入.