Visual Basic - Exportar MAS RAPIDO a Excel DataGridView con mas de 10,000 Registros

Life is soft - evento anual de software empresarial
 
Vista:
sin imagen de perfil
Val: 1
Ha aumentado su posición en 101 puestos en Visual Basic (en relación al último mes)
Gráfica de Visual Basic

Exportar MAS RAPIDO a Excel DataGridView con mas de 10,000 Registros

Publicado por Felipe De Jesus (1 intervención) el 03/09/2019 20:26:02
Hola colegas, estoy trabajando en una aplicacion de windows Forms que llena un datagrid view y luego al hacer click en un boton exporta la tabla a excel, el problema es que trabajo con tablas que contienen miles de registros y tarda una eternidad para generar el archivo, hablando de horas..
¿Alguien conoce una mejor manera de exportar la tabla rapidamente?

El codigo de la funcion que exporta el grid view es el siguiente:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
Function llenarExcel(ByVal ElGrid As DataGridView) As Boolean
    report_creator.pb_excel.Visible = True
    report_creator.pb_excel.Value = 0
    'Creamos las variables
    Dim exApp As New Microsoft.Office.Interop.Excel.Application
    Dim exLibro As Microsoft.Office.Interop.Excel.Workbook
    Dim exHoja As Microsoft.Office.Interop.Excel.Worksheet
    Try
 
        'Añadimos el Libro al programa, y la hoja al libro
        exLibro = exApp.Workbooks.Add
        exHoja = exLibro.Worksheets.Add()
        ' ¿Cuantas columnas y cuantas filas?
        Dim NCol As Integer = ElGrid.ColumnCount
        Dim NRow As Integer = ElGrid.RowCount
        'Aqui recorremos todas las filas, y por cada fila todas las columnas
        'y vamos escribiendo.
        exHoja.Cells.Item(1, 2) = "Reportado: " & report_creator.lb_tabla.Text()
        exHoja.Cells.Item(1, 4) = "Actualizado a: " & DateTime.Now.ToLocalTime
        For i As Integer = 1 To NCol
            exHoja.Cells.Item(3, i) = ElGrid.Columns(i - 1).Name.ToString
        Next
 
        For Fila As Integer = 0 To NRow - 1
            For Col As Integer = 0 To NCol - 1
                report_creator.pb_excel.Value = Fila
                report_creator.pb_excel.Maximum = NRow
                exHoja.Cells.Item(Fila + 4, Col + 1) = ElGrid.Item(Col, Fila).Value
            Next
        Next
        report_creator.pb_excel.Visible = False
 
        'Titulo en negrita, Alineado al centro y que el tamaño de la columna
        'se ajuste al texto
        exHoja.Rows.Item(1).HorizontalAlignment = 1
        exHoja.Rows.Item(3).Font.Bold = 1
        exHoja.Rows.Item(3).HorizontalAlignment = 3
        'exHoja.Columns.AutoFit()
        'Aplicación visible
        exApp.Application.Visible = True
        exHoja = Nothing
        exLibro = Nothing
        exApp = Nothing
    Catch ex As Exception
        MsgBox(ex.Message, MsgBoxStyle.Critical, "Error al exportar a Excel")
        Return False
    End Try
    Return True
End Function
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder