2013-07-26 92 views
0

我想導出數據網格控件中的值爲excel。我遇到的問題是調試後,當我點擊按鈕時,應用程序就會卡住。我也無法關閉表單。我必須點擊調試按鈕。 Excel文件也不會被創建。導出datagrid值爲excel

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click 
    Dim xlApp As Microsoft.Office.Interop.Excel.Application 
    Dim xlWorkBook As Microsoft.Office.Interop.Excel.Workbook 
    Dim xlWorkSheet As Microsoft.Office.Interop.Excel.Worksheet 
    Dim misValue As Object = System.Reflection.Missing.Value 
    Dim i As Integer 
    Dim j As Integer 

    xlApp = New Microsoft.Office.Interop.Excel.ApplicationClass 
    xlWorkBook = xlApp.Workbooks.Add(misValue) 
    xlWorkSheet = CType(xlWorkBook.Worksheets.Item("sheet1"), Microsoft.Office.Interop.Excel.Worksheet) 
    For i = 0 To DataGridView1.RowCount - 2 
     For j = 0 To DataGridView1.ColumnCount - 1 
      For k As Integer = 1 To DataGridView1.Columns.Count 
       xlWorkSheet.Cells(1, k) = DataGridView1.Columns(k - 1).HeaderText 
       xlWorkSheet.Cells(i + 2, j + 1) = DataGridView1(j, i).Value.ToString() 
      Next 
     Next 
    Next 



    xlWorkSheet.SaveAs("D:\vbexcel.xlsx") 
    xlWorkBook.Close() 
    xlApp.Quit() 

    xlApp = Nothing 
    xlWorkBook = Nothing 
    xlWorkSheet = Nothing 

    MsgBox("You can find the file D:\vbexcel.xlsx") 

End Sub 
+0

你有沒有通過代碼加強?該程序在什麼時候執行凍結? –

+0

kk ....代碼實際上工作..但它需要很長時間...我怎麼能加快它? – user2444712

回答

0

嘗試......

For k As Integer = 0 To DataGridView1.Columns.Count - 1 
    xlWorkSheet.Cells(1, k + 1) = DataGridView1.Columns(k).HeaderText 
Next 
For i = 0 To DataGridView1.RowCount - 1 
    For j = 0 To DataGridView1.ColumnCount - 1 

     xlWorkSheet.Cells(i + 2, j + 1) = DataGridView1(j, i).Value.ToString() 

    Next 
Next 
+0

謝謝....它仍然需要大約10秒來創建excel文件...你能幫我加快速度嗎? – user2444712

+0

@ user2444712​​ ..它比你的工作更好嗎? ..因爲我認爲這對互操作工作很安靜..或者,也許你可以嘗試打開你的Excel作爲數據庫連接.. – matzone