Visual Basic.NET - Ayuda con progressbar, donde lo pongo.

   
Vista:

Ayuda con progressbar, donde lo pongo.

Publicado por Juan Carlos (9 intervenciones) el 30/10/2014 15:34:56
hola, tengo este codigo que me exporta los datos de un datagridview a excel, el detalle es que me demora la exportacion y no se cuando termina de exportar, quisiera saber donde puedo agregar la parte del progressbar para observar el progreso de exportacion en mi aplicacion.

he leido en internet que la parte del progressbar va entre el For y Next, intente ponerlo pero no funciona. espero y me ayuden a solucionar esto.

este es mi codigo

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Public Sub exportar_excel(ByVal datagridview1 As DataGridView, ByVal pth As String)
        Dim xlApp As Object = CreateObject("Excel.Application")
        Dim xlwoy As Object = xlApp.workbooks.add
        Dim xlwoz As Object = xlwoy.worksheets(1)
 
        For c As Integer = 0 To datagridview1.Columns.Count - 1
            xlwoz.cells(1, c + 1).value = datagridview1.Columns(c).HeaderText
        Next
 
        For r As Integer = 0 To datagridview1.RowCount - 1
 
            For c As Integer = 0 To datagridview1.Columns.Count - 1
                xlwoz.cells(r + 2, c + 1).value = datagridview1.Item(c, r).Value
            Next
 
        Next
        xlwoy.saveas(pth)
        xlwoz = Nothing
        xlwoy = Nothing
        xlApp.quit()
        xlApp = Nothing
    End Sub
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
Imágen de perfil de giancarlo

Ayuda con progressbar, donde lo pongo.

Publicado por giancarlo (280 intervenciones) el 30/10/2014 17:51:49
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
Public Sub exportar_excel(ByVal datagridview1 As DataGridView, ByVal pth As String)
Dim xlApp As Object = CreateObject("Excel.Application")
Dim xlwoy As Object = xlApp.workbooks.add
Dim xlwoz As Object = xlwoy.worksheets(1)
 
'aqui inicias el progreso
barra.value=0
barra.maximun=datagridview1.rowcount
 
For c As Integer = 0 To datagridview1.Columns.Count - 1
xlwoz.cells(1, c + 1).value = datagridview1.Columns(c).HeaderText
Next
 
For r As Integer = 0 To datagridview1.RowCount - 1
 
For c As Integer = 0 To datagridview1.Columns.Count - 1
xlwoz.cells(r + 2, c + 1).value = datagridview1.Item(c, r).Value
'aqui aumentas 1 por cada registro
barra.value+=1
Next
 
Next
xlwoy.saveas(pth)
xlwoz = Nothing
xlwoy = Nothing
xlApp.quit()
xlApp = Nothing
msgbox("Exportado")
 
End Sub

aparte, hay que bloquear el formulario para que al hacerle clic no se ponga en que no responde el programa. en este momento no recuerdo muy bien como se hacia

Algo que te recomendaria, para que guardes mas rapido a excel, es que guardes por array o lo guardes a block de notas o CSV por tabulacion y de ahi generar un excel e importarlo. No tengo el codigo a la mano, pero es mas rapido este ultimo, segun mis pruebas anteriormente:

para 500 000 registros, y entre 10 y 20 columnas
por celda(como estas haciendo) 15 a 20 minutos
por array celda 10 a 15
a CSV con streamwriter e importarlo desde el excel entre 1 y 3 minutos

por si te interesa puedes buscar: streamwriter(para guardar como CSV o texto) y tambien importar txt desde excel+vb.net
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Ayuda con progressbar, donde lo pongo.

Publicado por Juan Carlos (9 intervenciones) el 31/10/2014 01:04:24
Muchas gracias por haber respondido a mi pregunta, te comento que no me funciono ya que me envio este error

El valor de '4537' no es válido para 'Value'. 'Value' debería estar entre 'minimum' y 'maximum'.
Nombre del parámetro: Value

no se a que se deba esto. si me pudiera explicar para entenderlo mejor te agradecer mucho.

saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Ayuda con progressbar, donde lo pongo.

Publicado por Miguel (347 intervenciones) el 31/10/2014 03:14:28
Hola, el error se debe a que el valor que le asignas al progressbar supera la propiedad "maximum" (supongo).

Utiliza un "try - catch"; pero solamente cuando asignas un nuevo valor para que cuando encuentre un error no salga y continúe con la función.


Saludos,
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de giancarlo

Ayuda con progressbar, donde lo pongo.

Publicado por giancarlo (280 intervenciones) el 31/10/2014 14:56:43
mqequivoque en este bloque:

1
2
3
4
5
6
For r As Integer = 0 To datagridview1.RowCount - 1
For c As Integer = 0 To datagridview1.Columns.Count - 1
xlwoz.cells(r + 2, c + 1).value = datagridview1.Item(c, r).Value
'aqui aumentas 1 por cada registro
barra.value+=1 'no correcto
Next

Deberia ser asi:

1
2
3
4
5
6
7
For r As Integer = 0 To datagridview1.RowCount - 1
For c As Integer = 0 To datagridview1.Columns.Count - 1
xlwoz.cells(r + 2, c + 1).value = datagridview1.Item(c, r).Value
Next
'aqui aumentas 1 por cada registro-----donde realmente tiene que ir
barra.value+=1
Next
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar

Ayuda con progressbar, donde lo pongo.

Publicado por Juan Carlos (9 intervenciones) el 31/10/2014 16:26:18
MIl Gracias amigo, ya quedo. Que bueno que hay persona como tu para apoyarnos en estas situaciones. Gracias nuevamente.

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar