請教大神們,我用以下的代碼從VB.NET的datagridview中匯出excel表格,同樣的代碼,在家里的電腦速度還算可以,100行資料大概兩秒導完。但在單位的電腦卻不知道為什么很慢,測驗了一下,60行資料(20列)居然要2分鐘,幾乎是一個個單元格的顯示。
不知道是什么原因,求老師們幫忙看看。如果代碼有問題,可否幫忙指正?或者有更有效的代碼給小弟參考~~~
感謝~~~
Dim xlApp, xlBook, xlSheet As Object
xlApp = CreateObject("Excel.Application")
xlBook = xlApp.Workbooks.Add
xlSheet = xlBook.Worksheets()
xlApp.Visible = True '使作業表可見
Dim Cols As Integer '匯出DataGridView中的標題
For Cols = 1 To DataGridView1.Columns.Count
xlApp.Cells(1, Cols) = DataGridView1.Columns(Cols - 1).HeaderText
Next
Dim i As Integer '逐行匯出DataGridView中的資料
For i = 0 To DataGridView1.RowCount - 1
Dim j As Integer
For j = 0 To DataGridView1.ColumnCount - 1
If Me.DataGridView1(j, i).Value Is System.DBNull.Value Then '判斷DataGridview中的資料是否匯出完畢
xlApp.Cells(i + 2, j + 1) = ""
Else
xlApp.Cells(i + 2, j + 1) = DataGridView1(j, i).Value.ToString()
End If
Next
Next
uj5u.com熱心網友回復:
For Cols = 1 To DataGridView1.Columns.CountxlApp.Cells(1, Cols) = DataGridView1.Columns(Cols - 1).HeaderText
Next
這樣的寫法就是問題所在了。單位電腦CPU計數器慢,當然就延遲了。盡量不這樣用。使用 for each(range as xlsheet.UsedRange) ....next.
另外datagridview里面有個直接復制粘貼到excel里面的方法。你自己查下。整張表的話,就把datagridview的multirow屬性true.然后selectall,設定到clipboard里面,excel創建類的方法里面pastespecial就可以了。這些東西對我已經很遠了,依稀記得,希望能幫到您。
uj5u.com熱心網友回復:
for each(range as Range in xlsheet.usedrange).....nextuj5u.com熱心網友回復:
老師 為什么我把他的代碼復制過來 運行以后 [ xlApp.Cells(i + 2, j + 1) = DataGridView1(j, i).Value.ToString()] 這段代碼提示System.NullReferenceException:“未將物件參考設定到物件的實體。”請教
uj5u.com熱心網友回復:
設定斷點調式,或是xlapp物件創建不成功抑或是datagridview為空。也可以用try catch(exception ex),彈出錯誤,會看到是哪個物件為空。
uj5u.com熱心網友回復:
微軟VBnet里參考Excel類確實有很多缺點,比如依賴性太強,目標電腦必須安裝Excel還得版本對,遍歷效率太慢。哎。。。轉載請註明出處,本文鏈接:https://www.uj5u.com/net/44644.html
標籤:VB.NET
上一篇:想請問下關于多執行緒的問題
