none
請問各位大大我有15個Datagridview要塞入excel同一個檔案不同工作表中,我使用如下方法但速度太慢了請問各位大大有甚麼比較好的方法可以加快速度 RRS feed

  • 問題

  • 請問各位大大我有15個Datagridview要塞入excel同一個檔案不同工作表中,我使用如下方法但速度太慢了請問各位大大有甚麼比較好的方法可以加快速度(我使用VB.net)

     
    strDbCon = "Persist Security Info=False;User ID=sa;pwd=****;Initial Catalog=****;Data Source=******"
            conn = New SqlConnection(strDbCon)
            conn.Open()
            strSDate = Format(Now, "yyyy/MM/dd")
            strEDate = Format(DateAdd(DateInterval.Day, 14, Now), "yyyy/MM/dd")
           '-----列印折讓證明單明細檔-----'
            sqlstr = "select * from 折讓證明單 " '連線15次
            cmd = New SqlCommand(sqlstr, conn)
            cmd.ExecuteNonQuery()
            Dim dTable As New DataTable
            Using Rdr As SqlDataReader = cmd.ExecuteReader
                dTable.Load(Rdr)
            End Using
            DataGridView1.DataSource = dTable
            cd() '呼叫15次

    我連線15次呼叫 cd() '呼叫15次將資料塞入同一個excel不同的工作表中 但速度有夠慢         PS:cdk是用來修改excel 工作表的名稱

     Sub cd()
            cdk += 1
            Dim excel As Microsoft.Office.Interop.Excel.Application
            Try
                excel = New Microsoft.Office.Interop.Excel.Application
                excel.Workbooks.Open("D:\TPE.xlsx")
                'excel.Sheets.Add() '2020/10/21 新增一張工作表
                'excel.Cells.NumberFormatLocal = "@" '指定xlsx儲存格為文字格式但有問題日期會變數字
                Dim i As Integer, j As Integer
                Dim diff As Integer = 1
                ' if you want column header from dgv elese omit the block 
                '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 
                For j = 0 To DataGridView1.ColumnCount - 1
                    excel.Worksheets(cdk).cells(1, j + 1) = DataGridView1.Columns(j).Name
                Next
                diff += 1
                ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 
                For i = 0 To DataGridView1.RowCount - 1
    
                    If DataGridView1.Rows(i).IsNewRow = False Then
                        For j = 0 To DataGridView1.ColumnCount - 1
                            excel.Worksheets(cdk).cells(i + diff, j + 1) = DataGridView1.Item(j, i).Value
                        Next
                    End If
                Next
                excel.Worksheets(cdk).select()
                Select Case cdk
                    Case 1
                        excel.Sheets("工作表1").name = "上傳及列印折讓證明單主檔"
                    Case 2
                        excel.Sheets("工作表2").name = "上傳及列印折讓證明單明細檔"
                    Case 3
                        excel.Sheets("工作表3").name = "列印折讓證明單主檔"
                    Case 4
                        excel.Sheets("工作表4").name = "列印折讓證明單明細檔"
                    Case 5
                        excel.Sheets("工作表5").name = "上傳折讓證明單主檔"
                    Case 6
                        excel.Sheets("工作表6").name = "上傳折讓證明單明細檔"
                    Case 7
                        excel.Sheets("工作表7").name = "上傳電子發票主檔"
                    Case 8
                        excel.Sheets("工作表8").name = "上傳電子發票表身檔"
                    Case 9
                        excel.Sheets("工作表9").name = "上傳及列印電子發票主檔"
                    Case 10
                        excel.Sheets("工作表10").name = "上傳及列印電子發票表身檔"
                    Case 11
                        excel.Sheets("工作表11").name = "列印電子發票主檔"
                    Case 12
                        excel.Sheets("工作表12").name = "列印電子發票明細檔"
                    Case 13
                        excel.Sheets("工作表13").name = "作廢折讓證明單"
                    Case 14
                        excel.Sheets("工作表14").name = "作廢電子發票檔"
                    Case Else
                        excel.Sheets("工作表15").name = "註銷電子發票"
                End Select
                excel.ActiveWorkbook().Save()
                excel.Workbooks.Close()
                excel.Quit()
                excel = Nothing
                If cdk >= 16 Then
                    Call KillProcess("EXCEL")
                End If
    
            Catch ex As System.Runtime.InteropServices.COMException
                MessageBox.Show("Error accessing Excel: " + ex.ToString())
            Catch ex As Exception
                MessageBox.Show("Error: " + ex.ToString())
            End Try
            'MsgBox(cdk)
        End Sub
    請問各位大大要如何改才能加快速度? 如果我將所有查詢的檔案15個一次叫出來放在Datagridview中(即Datagridview1~Datagridview15)請問該如何塞入同一個excel不同工作表中

    2020年10月23日 上午 03:12

所有回覆