none
Visual Studio: Como pasar los datos de un DataGridView a un libro de Excel RRS feed

  • Pregunta

  • Buenos días,

    Estoy realizando un proyecto en Visual Studio y quiero pasar la informacion que se muestra en el DataGridViewa excel, me gustaria que me auxiliaran por favor.

    Tengo el DataGrid funcionando y he realizado la clase para exportar, pero me falta programar el boton para exportar

    Este es el codigo de la clase:

    Imports Microsoft.Office.Interop
    Public Class ExportaraExcel
        Public Sub exportaraexcel(ByVal tabla As DataTable)
            Dim fila As DataRow
            Dim posicion As Integer = 3
            Dim MExcel As New Excel.Application
            Dim objlibroexcel As Excel.Workbook = MExcel.Workbooks.Add
            Dim objhojaexcel As Excel.Worksheet = objlibroexcel.Worksheets(1)
            With objhojaexcel
                .Visible = Excel.XlSheetVisibility.xlSheetVisible
                .Activate()
                .Name = "Exportacion"
                .Range("A1").Value = "Datos para Graficar"
                .Range("A1").Font.Size = 28
                .Range("A1").Font.Name = "Times New Roman"
                .Range("A1").HorizontalAlignment = Excel.XlHAlign.xlHAlignCenter
                .Range("A1").RowHeight = 30
                .Range("A1:F1").MergeCells = True 'COMBINA
                .Range("A2").Value = "id"
                .Range("A2").ColumnWidth = 5
                .Range("B2").Value = "EQUIPO"
                .Range("B2").ColumnWidth = 40
                .Range("C2").Value = "FECHA"
                .Range("C2").ColumnWidth = 40
                .Range("D2").Value = "HORA"
                .Range("D2").ColumnWidth = 7
                .Range("E2").Value = "TERMOMETRO"
                .Range("E2").ColumnWidth = 50
                .Range("F2").Value = "TEMPERATURA IDEAL"
                .Range("F2").ColumnWidth = 50
                .Range("G2").Value = "TEMPERATURA OBTENIDA"
                .Range("G2").ColumnWidth = 50
                .Range("H2").Value = "ANALISTA"
                .Range("H2").ColumnWidth = 70
                .Range("I2").Value = "OBSERVACIONES"
                .Range("I2").ColumnWidth = 70


            End With
            For Each fila In tabla.Rows
                objhojaexcel.Range("A" & posicion).Value = fila.Item("id") 'para bd
                objhojaexcel.Range("B" & posicion).Value = fila.Item("equipo")
                objhojaexcel.Range("C" & posicion).Value = fila.Item("fecha")
                objhojaexcel.Range("D" & posicion).Value = fila.Item("hora")
                objhojaexcel.Range("E" & posicion).Value = fila.Item("termometro")
                objhojaexcel.Range("F" & posicion).Value = fila.Item("temp_ideal")
                objhojaexcel.Range("G" & posicion).Value = fila.Item("temp_obtenida")
                objhojaexcel.Range("H" & posicion).Value = fila.Item("analista")
                objhojaexcel.Range("I" & posicion).Value = fila.Item("observaciones")
                posicion += 1
            Next

            MExcel.Visible = True
        End Sub
    End Class

    miércoles, 6 de julio de 2016 17:11

Respuestas

Todas las respuestas

  • Hola,

    ¿Cual es el problema? en un principio parece todo correcto, lo unico que tienes que hacer es poner ese código en el evento click del boton o mejor aun llamar al metodo desde el evento click.

    Un saludo.


    Es de buena educación dar las gracias cuando te ayudan, si alguna respuesta te ha sido de utilidad agradécelo marcandola como útil.
    Blog

    jueves, 7 de julio de 2016 6:10
  • Hola Rocio Maya Camacho al parecer sólo te faltaría llamar a dicha función desde el botón exportar.

    En dónde podrías pasar los datos de tu datagridview al datatable que envías cómo argumento a la función exportar, o a su vez, cambiar el argumento, en lugar de que sea datatable, sea el mismo datagridview.

    Saludos


    Javier

    jueves, 7 de julio de 2016 13:33
  • Rodripelto y Javier Córdova creo que ya entendi lo que realmente esta pidiendo, creo que lo que ella quiere saber es como pasar el DataGridView a un DataTable para poder mandarlo al sub exportaraexcel.

    si me permites hacer una sugerencia, este ejemplo no pasa el datagrid a un datatable si no que lo pasa directo, tal vez no sea lo que buscas o la mejor manera de hacerlo pero igual puede ayudarte.

    Imports Microsoft.Office.Interop
    Public Class Form1
    
        Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
            exportaraexcel(DataGridView1)
        End Sub
        
        Public Sub exportaraexcel(ByVal tabla As DataGridView)
            
            Dim posicion As Integer = 3
            Dim MExcel As New Excel.Application
            Dim objlibroexcel As Excel.Workbook = MExcel.Workbooks.Add
            Dim objhojaexcel As Excel.Worksheet = objlibroexcel.Worksheets(1)
            With objhojaexcel
                .Visible = Excel.XlSheetVisibility.xlSheetVisible
                .Activate()
                .Name = "Exportacion"
                .Range("A1").Value = "Datos para Graficar"
                .Range("A1").Font.Size = 28
                .Range("A1").Font.Name = "Times New Roman"
                .Range("A1").HorizontalAlignment = Excel.XlHAlign.xlHAlignCenter
                .Range("A1").RowHeight = 30
                .Range("A1:F1").MergeCells = True 'COMBINA
                .Range("A2").Value = "id"
                .Range("A2").ColumnWidth = 5
                .Range("B2").Value = "EQUIPO"
                .Range("B2").ColumnWidth = 40
                .Range("C2").Value = "FECHA"
                .Range("C2").ColumnWidth = 40
                .Range("D2").Value = "HORA"
                .Range("D2").ColumnWidth = 7
                .Range("E2").Value = "TERMOMETRO"
                .Range("E2").ColumnWidth = 50
                .Range("F2").Value = "TEMPERATURA IDEAL"
                .Range("F2").ColumnWidth = 50
                .Range("G2").Value = "TEMPERATURA OBTENIDA"
                .Range("G2").ColumnWidth = 50
                .Range("H2").Value = "ANALISTA"
                .Range("H2").ColumnWidth = 70
                .Range("I2").Value = "OBSERVACIONES"
                .Range("I2").ColumnWidth = 70
    
    
            End With
            For f As Integer = 0 To tabla.RowCount - 1
                objhojaexcel.Range("A" & posicion).Value = tabla.Item(NumeroDeColumnaid, f) 'para bd
                objhojaexcel.Range("B" & posicion).Value = tabla.Item(NumeroDeColumnaequipo, f)
                objhojaexcel.Range("C" & posicion).Value = tabla.Item(NumeroDeColumnafecha, f)
                objhojaexcel.Range("D" & posicion).Value = tabla.Item(NumeroDeColumnahora, f)
                objhojaexcel.Range("E" & posicion).Value = tabla.Item(NumeroDeColumnatermometro, f)
                objhojaexcel.Range("F" & posicion).Value = tabla.Item(NumeroDeColumnatemp_ideal, f)
                objhojaexcel.Range("G" & posicion).Value = tabla.Item(NumeroDeColumnatemp_obtenida, f)
                objhojaexcel.Range("H" & posicion).Value = tabla.Item(NumeroDeColumnaanalista, f)
                objhojaexcel.Range("I" & posicion).Value = tabla.Item(NumeroDeColumnaobservaciones, f)
                posicion += 1
            Next
    
            MExcel.Visible = True
        End Sub
    End Class

    quite unas partes como :

    Dim fila As DataRow

    Public Class ExportaraExcel


    • Editado RHCRD jueves, 7 de julio de 2016 14:24
    jueves, 7 de julio de 2016 14:03
  • Hola:

    Estoy realizando un proyecto en Visual Studio y quiero pasar la información que se muestra en el DataGridViewa excel

     Por favor lee este articulo:

    Trabajar con archivos Excel desde WindowsForms (SpreadSheetLight)

     En el explico como de una forma muy sencilla podemos valernos de una librería para realizar esto que deseas ademas de otras muchas opciones que podemos explotar de SpreadSheetLight.

     Espero te sea de utilidad.


    Saludos desde Monterrey, Nuevo León, México!!!

    jueves, 7 de julio de 2016 14:21
  • Muchas gracias lo he logrado pero ahora tengo otro problema, agradeceria me ayudaran ya le he quitado algunas columnas pero

    Necesito que en el Datagridview se pueda obtener el promedio de la columna VALOR OBTENIDO si en la columna DIA tienen el mismo valor.

    Realizar un ciclo para obtener el promedio de cada 3 valores que cumplan con esa condicion y colocarlo en la columna Promedio ("resultado" )

    Nota: La primera columna siempre contendra 3 iguales.

     
    DIA VALOR OBTENIDO       PROMEDIO
    28/06/2016         35,00  "resultado"
    28/06/2016 35,02  
    28/06/2016 34,08  
    29/06/2016 34,08  "resultado"
    29/06/2016 35,00  
    29/06/2016 34,08  
    30/06/2016 35,02  "resultado"
    30/06/2016 34,08  
    30/06/2016 35,00  

    Saludos


    martes, 26 de julio de 2016 15:21