用于大型导出sql到excel进程的进度条

时间:2014-12-11 03:14:12

标签: mysql vb.net excel progress-bar

我需要为导出过程创建一个进度条。

我已经有了导出代码。但是,要导出的数据越大,系统挂起的时间就越长,并且不会向用户提供正在执行某些操作的信息。 我需要的是创建一个进度条,至少告知用户进程正在完成。

我不知道放在哪里以及放什么。

我正在使用VS 2013 Ultimate和Excel 2013 ..这是我的导出代码。

Try
    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.Application
    xlWorkBook = xlApp.Workbooks.Add(misValue)
    xlWorkSheet = xlWorkBook.Sheets("sheet1")

    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:\NGPdata.xlsx")
    xlWorkBook.Close()
    xlApp.Quit()

    releaseObject(xlApp)
    releaseObject(xlWorkBook)
    releaseObject(xlWorkSheet)
Catch ex As Exception
    MsgBox(ex.Message & " here")
End Try
Try
    Dim res As MsgBoxResult
    res = MsgBox("Process completed, Would you like to open file?", MsgBoxStyle.YesNo)
    If (res = MsgBoxResult.Yes) Then
        Process.Start("D:\NGPdata.xlsx")
    End If
Catch ex As Exception
    MsgBox(ex.Message)
End Try

以及它所需的代码。

Private Sub releaseObject(ByVal obj As Object)
    Try
        System.Runtime.InteropServices.Marshal.ReleaseComObject(obj)
        obj = Nothing
    Catch ex As Exception
        obj = Nothing
    Finally
        GC.Collect()
    End Try
End Sub

1 个答案:

答案 0 :(得分:0)

  1. 在表单中插入ProgressBar。
  2. 修改ProgressBar的属性

    value = 0
    Maximun = 100
    
  3. 你的代码应该是:

        ...
        Dim Increment as Single
        Dim IntMax, currentIndex as Long
        currentIndex = 0
        intMax = (DataGridView1.RowCount - 2) * (DataGridView1.ColumnCount - 1) * DataGridView1.ColumnCount
    
        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()
    
                    Increment= Int(currentIndex / intMax)
                    ProgressBar1.Increment(Increment)
                    currentIndex += 1
                Next
            Next
        Next