将datagridview数据传输到excel

时间:2017-02-22 23:39:20

标签: excel vb.net winforms datagridview epplus

我正在使用EPPlus将我的datagridview数据传输到excel文件,我的问题是进程正在吃内存,我错过了什么来释放已用内存?在外面看起来好几千行,但程序使用的内存上升,并且在导出和保存到excel之后不会回落。现在,当我尝试导出一百万行时,我的内存耗尽。

这是我的代码,此过程在后台工作程序上运行。

Using p = New ExcelPackage
        Dim sheetnum As Integer = 2
        Dim ws As ExcelWorksheet = CreateSheet(p, "report")
        For Each dgcol As DataGridViewColumn In dg.Columns
            ws.Cells(1, col).Value = dgcol.HeaderText
            col += 1
        Next

        For Each rowx As DataGridViewRow In dg.Rows
            For Each colx As DataGridViewColumn In dg.Columns
                ws.Cells(row, colx.Index + 1).Value = dg.Rows(rowx.Index).Cells(colx.Index).Value
            Next
            row += 1
            BackgroundWorker1.ReportProgress(CInt(100 * Integer.Parse(rowx.Index + 1) / dg.Rows.Count), CInt(100 * Integer.Parse(rowx.Index + 1) / dg.Rows.Count))
            If row = 1048577 Then 'Check if max rows have been reached and create a new sheet
                ws = CreateSheet(p, "report" & sheetnum)
                sheetnum += 1
                row = 2
                col = 1
                For Each dgcol As DataGridViewColumn In dg.Columns
                    ws.Cells(1, col).Value = dgcol.HeaderText
                    col += 1
                Next
            End If
        Next

        Dim bin() As Byte = p.GetAsByteArray()
        File.WriteAllBytes(Environment.GetFolderPath(Environment.SpecialFolder.Desktop) & "\" & "report.xlsx", bin)
    End Using

1 个答案:

答案 0 :(得分:0)

由于它被using块包围,ExcelPackage对象被妥善处理掉了。你说你还在评论中处理了ExcelWorksheet对象,但没有成功。

但是,我认为你没有在最后一行代码中处理你写入文件的字节数组(在End Using之前)

试试吧。希望它有所帮助。