Visual Basic.NET - Excel cambia de fila

 
Vista:
sin imagen de perfil

Excel cambia de fila

Publicado por anonymous (99 intervenciones) el 12/10/2016 21:17:11
Hola amigos, haber si me explico:
exporto los datos a varias hojas de Excel, todo lo hice bien MENOS un detalle: en la primera hoja escribe todo lo que quiero y como lo quiero, pero en la segunda hoja inicia en una fila después de la que se quedó en la primera hoja, en la tercera hoja inicia una fila después de la que se quedó en la segunda, en la cuarta.... y asi sucesivamente, tengo doce hojas, en la última inicia a escribir muy abajo. 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
23
24
25
26
27
28
29
30
31
32
33
exLibro = exApp.Workbooks.Add
exHoja = exLibro.Worksheets.Add()
Dim NCol As Integer = ElGrid.ColumnCount
Dim NRow As Integer = ElGrid.RowCount
Dim gpos() As String = {"1° A", "1° B", "1° C", "1° D", "2° A", "2° B", "2° C", "2° D", "3° A", "3° B", "3° C", "3° D"}
exApp.Application.Visible = True
Dim g, fil As Integer
g = 0
For y = 0 To 11
    fil = 2                               ''' 'variable para la fila 2 de cada hoja
    ElGrid.Rows(0).Selected = True
    For i As Integer = 1 To NCol
        exHoja.Cells.Item(1, i) = ElGrid.Columns(i - 1).HeaderText
    Next
    For Fila As Integer = 0 To NRow - 1
        For Col As Integer = 0 To NCol - 1
            If ElGrid.Rows(Fila).Cells(1).Value = gpos(g) Then
                exHoja.Cells.Item(fil, Col + 1) = ElGrid.Rows(Fila).Cells(Col).Value    '' datos en la fila y columna
            End If
        Next
        fil = fil + 1                                 '''aqui quiero cambiar de fila
    Next
    exHoja.Rows.Item(1).Font.Bold = True
    exHoja.Rows.Item(1).HorizontalAlignment = 3
    exHoja.Columns.AutoFit()
    exHoja.Name = gpos(g)
    g = g + 1
    exHoja = exLibro.Worksheets.Add()
    exHoja.Activate()
Next
exHoja = Nothing
exLibro = Nothing
exApp = Nothing


Alguna sugerencia? ya probe de diversas formas y no encuentro la solución. GRACIAS!
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
sin imagen de perfil
Val: 481
Bronce
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Excel cambia de fila

Publicado por Miguel (476 intervenciones) el 12/10/2016 22:27:51
En donde asignas el valor a la celda (exHoja.Cells.Item(fil, Col + 1) = ElGrid.Rows(Fila).Cells(Col).Value) no sé por qué estás usando el valor de "fil" para indicar la fila, si lo puedes hacer con el valor de Fila (que es el iterador del For) como lo haces con la columna (Col).

Slds.
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
sin imagen de perfil

Excel cambia de fila

Publicado por anonymous (99 intervenciones) el 13/10/2016 00:18:39
Hola Miguel:
es una de las pruebas que hice; con el contador "Fila" del for-next lo hace bien pero con el problema que describo anteriormente; o sea, si pongo > exHoja.Cells.Item(fila + 2, Col + 1) = ElGrid.Rows(Fila).Cells(Col).Value < lo que hace es que al cambiar de hoja en el Excel, inicia en la fila 21 si en la primera hoja terminó en la fila 20. En la tercera hoja inicia en la fila 61 si en la hoja 2 termina en el 59 y asi sucesivamente.

No encuentro la manera de que al cambiar de hoja de Excel, inicie a escribir en la segunda fila, no donde se quedó en la anterior hoja,.

Gracias Miguel por ayudarme. 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
sin imagen de perfil
Val: 481
Bronce
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Excel cambia de fila

Publicado por Miguel (476 intervenciones) el 13/10/2016 05:11:47
Bueno, ya vi lo que pasa. Como no estás agregando todas las filas del DataGridView si tienes que usar tu variable auxiliar (fil), pero tienes que aumentarla sólo cuando pasas los datos al Excel, si no estarías haciendo lo mismo.

Slds.
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
sin imagen de perfil

Excel cambia de fila

Publicado por anonymous (99 intervenciones) el 13/10/2016 15:53:47
hola amigo Miguel:
Precisamente lo que pretendo pero no puedo, es regresar la variable fil a 2, Pero no he podido, ya he probado de varias maneras, alguna sugerencia?
Corriendo el programa con punto de interrupción al finalizar el primer for, la variable fil sí marca que regresa a 2 pero presiono F5 y sorpresa! la variable fil comienza en el 23 en la segunda hoja del Excel. AYUDA!!!
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
exLibro = exApp.Workbooks.Add
exHoja = exLibro.Worksheets.Add()
Dim NCol As Integer = ElGrid.ColumnCount
Dim NRow As Integer = ElGrid.RowCount
Dim gpos() As String = {"1° A", "1° B", "1° C", "1° D", "2° A", "2° B", "2° C", "2° D", "3° A", "3° B", "3° C", "3° D"}
exApp.Application.Visible = True
Dim g, fil As Integer
g = 0
fil = 2      ''''variable fil en 2 antes de todo proceso
For y = 0 To 11                           ''' aqui fil debe ser = 2 la primera y las 11 veces restantes porque abajo la regresé a 2 
    ElGrid.Rows(0).Selected = True
    For i As Integer = 1 To NCol
        exHoja.Cells.Item(1, i) = ElGrid.Columns(i - 1).HeaderText
    Next
    For Fila As Integer = 0 To NRow - 1
        For Col As Integer = 0 To NCol - 1
            If ElGrid.Rows(Fila).Cells(1).Value = gpos(g) Then
                exHoja.Cells.Item(fil, Col + 1) = ElGrid.Rows(Fila).Cells(Col).Value    ''' variable fil en 2 para el primer alumno
            End If
        Next
        fil = fil + 1     ''' incrementa variable fil en 1 para la sifuiente fila, misma hoja
    Next
    fil = 2                  ''' regresa a 2 variable fil para iniciar en la siguiente hoja
    exHoja.Rows.Item(1).Font.Bold = True
    exHoja.Rows.Item(1).HorizontalAlignment = 3
    exHoja.Columns.AutoFit()
    exHoja.Name = gpos(g)
    g = g + 1
    exHoja = exLibro.Worksheets.Add()     ''''nueva hoja de excel
    exHoja.Activate()
Next
exHoja = Nothing
exLibro = Nothing
exApp = Nothing

alguien puede ver el error? o la sugerencia para encontrar la manera de que en cada hoja de Excel inicie a escribir en la segunda fila.
GRACIAS!
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 Wilfredo Patricio Castillo
Val: 1.239
Bronce
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Excel cambia de fila

Publicado por Wilfredo Patricio Castillo (720 intervenciones) el 13/10/2016 19:10:20
Hola

Creo que antes de activar la hoja, lo que tienes que hacer es primero, declarar un Rango, y seleccionar el rango.

te dejo un par de links para que le eches una mirada.

https://social.msdn.microsoft.com/Forums/es-ES/21e4f0bb-536d-4a76-a229-735d5c62fb0e/como-seleccionar-activar-una-celda-en-excel-mediante-codigo-c?forum=vcses

http://www.forosdelweb.com/f29/como-seleccionar-rango-automaticamente-usando-interop-c-741649/


Espero te ayude.

Saludos cordiales,
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
sin imagen de perfil
Val: 481
Bronce
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Excel cambia de fila

Publicado por Miguel (476 intervenciones) el 13/10/2016 20:33:53
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
exLibro = exApp.Workbooks.Add
exHoja = exLibro.Worksheets.Add()
Dim NCol As Integer = ElGrid.ColumnCount
Dim NRow As Integer = ElGrid.RowCount
Dim gpos() As String = {"1° A", "1° B", "1° C", "1° D", "2° A", "2° B", "2° C", "2° D", "3° A", "3° B", "3° C", "3° D"}
exApp.Application.Visible = True
Dim g, fil As Integer
g = 0
fil = 2      '''' OK
For y = 0 To 11
    ElGrid.Rows(0).Selected = True
    For i As Integer = 1 To NCol
        exHoja.Cells.Item(1, i) = ElGrid.Columns(i - 1).HeaderText
    Next
    For Fila As Integer = 0 To NRow - 1
        For Col As Integer = 0 To NCol - 1
            If ElGrid.Rows(Fila).Cells(1).Value = gpos(g) Then
                exHoja.Cells.Item(fil, Col + 1) = ElGrid.Rows(Fila).Cells(Col).Value    ''' variable fil en 2 para el primer alumno
                fil = fil + 1     ''' Es aquí donde debes incrementar el valor de 'fil'
            End If
        Next
        ''fil = fil + 1     ''' Aquí está el problema, porque estás incrementando el valor sin importar si la fila fue exportada
    Next
    fil = 2                  ''' regresa a 2 variable fil para iniciar en la siguiente hoja; OK
    exHoja.Rows.Item(1).Font.Bold = True
    exHoja.Rows.Item(1).HorizontalAlignment = 3
    exHoja.Columns.AutoFit()
    exHoja.Name = gpos(g)
    g = g + 1
    exHoja = exLibro.Worksheets.Add()     ''''nueva hoja de excel
    exHoja.Activate()
Next
exHoja = Nothing
exLibro = Nothing
exApp = Nothing
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
sin imagen de perfil

Excel cambia de fila

Publicado por anonymous (99 intervenciones) el 13/10/2016 20:41:46
Gracias Wilfredo, voy a hecharle una mirada a ese post.
Gracias Miguel, probando tu sugerencia.
Enseguida comento los resultados.
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