Exportar Datagridview a Excel

Hola, amigos esta entrega se trata de exportar el contenido de un Datagridview a excel. Muchas de las aplicaciones necesitan  pasar los datos calculados a instancias de hojas electronica en Excel. Este ejemplo primeramente hacemos la referencia Net  a Microsoft.Office.Interop.Excel, en mi caso a la version 12( o que es la de Excel 2010).
Veamos una captura:




Luego hacemos la generacion de datos en la grid(Código antes visto en mis anteriores entregas):

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        'GENERAR Y RELLENAR EL DATAGRIDVIEW
        Try
            Dim n As Integer = 6 ' cualquier valor para sumar
            Dim cantidad(n) As Integer 'matriz para almacenar hasta n valores
            Dim valor As Double = 0.18 'valor de un articulo en común ....para ejemplificar
            Dim subtotal(n) As Double ' matriz que almacena los subtotales de cada compra
            Dim suma As Double 'total de la suma de la columna subtotal
            For i As Integer = 0 To n - 1
                cantidad(i) = i 'Val(InputBox("Ingresar cantidad Nº" & i + 1)) 'Entrada manual
            Next
            For i As Integer = 0 To n - 1
                subtotal(i) = cantidad(i) * valor
                suma = suma + subtotal(i)
            Next
            grid1.Rows.Add(n + 1) 'numero de filas del grid
            For r As Integer = 0 To n - 1
                grid1.Item(0, r).Value = r + 1
                grid1.Item(1, r).Value = Format(cantidad(r), "0.00")
                grid1.Item(2, r).Value = Format(valor, "0.00")
                grid1.Item(3, r).Value = Format(subtotal(r), "0.00")
                grid1.Item(2, n).Value = "TOTALES="
                grid1.Item(3, n).Value = Format(suma, "0.00")
            Next
        Catch ex As KeyNotFoundException
            MessageBox.Show("Error de concurrencia:" & vbCrLf & ex.Message)
        End Try
    End Sub



 
 
Luego el código sobre El boton Exportar de Excel:


 Private Sub BtnExcel_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnExcel.Click
        'Crer dataset para exportar
        Dim dset As New DataSet
        'add table to dataset
        dset.Tables.Add()
        'agregar columnas a la tabla
        For i As Integer = 0 To grid1.ColumnCount - 1
            dset.Tables(0).Columns.Add(grid1.Columns(i).HeaderText)
        Next
        'agregar filas a la tabla
        Dim dr1 As DataRow
        For i As Integer = 0 To grid1.RowCount - 1
            dr1 = dset.Tables(0).NewRow
            For j As Integer = 0 To grid1.Columns.Count - 1
                dr1(j) = grid1.Rows(i).Cells(j).Value
            Next
            dset.Tables(0).Rows.Add(dr1)
        Next
        Dim excel As New Microsoft.Office.Interop.Excel.ApplicationClass
        Dim wBook As Microsoft.Office.Interop.Excel.Workbook
        Dim wSheet As Microsoft.Office.Interop.Excel.Worksheet
        wBook = excel.Workbooks.Add()
        wSheet = wBook.ActiveSheet()
        wSheet.Name = "Ejemplo"
        Dim dt As System.Data.DataTable = dset.Tables(0)
        Dim dc As System.Data.DataColumn
        Dim dr As System.Data.DataRow
        Dim colIndex As Integer = 0
        Dim rowIndex As Integer = 0
        For Each dc In dt.Columns
            colIndex = colIndex + 1
            excel.Cells(1, colIndex) = dc.ColumnName
        Next
        For Each dr In dt.Rows
            rowIndex = rowIndex + 1
            colIndex = 0
            For Each dc In dt.Columns
                colIndex = colIndex + 1
                excel.Cells(rowIndex + 1, colIndex) = dr(dc.ColumnName)
            Next
        Next
        wSheet.Columns.AutoFit()
        
        excel.Visible = True
    End Sub
Si ejecutamos veremos que se abre un hoja de Excel, y los datos exportados de la grid. Bueno amigos espero seguir exponiendoles codigo importantes como exportar a pdf, html, etc. Nos vemos!!

Mi ejemplo: https://docs.google.com/open?id=0B-UGWA03tc5ZcFphWFhuYXg2cWc

Si quieres agregar el formato(colores celdas,fuente, etc) de la Datagridview a la exportacion en Excel  entra a la parte 2 en este post: http://jossm03.blogspot.com/2013/11/exportar-datagridview-excel-ii.html

Comentarios

  1. es muy bueno brother exelente

    ResponderEliminar
  2. Gracias si me sirvio pero sera posible que se puedan pasar los datos con el diseño que tenga establecido en el datagrid en viaual basic????? es decir con colores de filas, etc

    ResponderEliminar
  3. Me da un erro con defino Microsoft.Office.Interop.Excel.ApplicationClass

    y los demas soy nuevo porfa te lo agradeceria...

    ResponderEliminar
    Respuestas
    1. hola que tal tienes que hacer la referencia a la libreria de excel tienes que ir elmenu proyecto---ir a Agregar referencia
      y buscar microsoft.Office.Interop.excel y dar aceptar

      Eliminar
  4. Hola, ya agregue la libreria y me dio error en

    Dim excel As New Microsoft.Office.Interop.Excel.ApplicationClass

    ResponderEliminar
  5. En vez de usar Microsoft.Office.Interop.Excel.ApplicationClass usa Microsoft.Office.Interop.Excel.Application y con eso se soluciona el problema

    ResponderEliminar
  6. Estimado, como sería si el grid tubiera solo datos alfanumericos, me explico: que tan solo tubiera 3 columnas con datos que son string ,ejemplo;columna 1 (usuario), columna 2(perfil),columna 3 (clave).
    quiero exportar esa informacion de un grid a excel.

    Ayudeme gran maestro.

    ResponderEliminar
    Respuestas
    1. hola que tal vi tu pregunta y te digo que necesitas en este caso ingresar los datos fisicamente en la grid desde unos textbox mas o menos, o conectado desde una base de datos al fin la grid solamente muestra datos ya sean conectados o no pero esa es la forma. Espero la hayas captado si no escribeme mi correo jossm04@gamil.com.Sin embargo intentaré hacer un ejercicio explicado y lo anexo

      Eliminar
  7. Que buenos aportes¡¡¡¡ saludos desde Quetzaltenango, Guatemala

    ResponderEliminar
  8. muchísimas gracias!!!
    QDTB
    =)

    ResponderEliminar
  9. Hola me queda con error estas tres lineas

    Dim excel As New Microsoft.Office.Interop.Excel.ApplicationClass
    Dim wBook As Microsoft.Office.Interop.Excel.Workbook
    Dim wSheet As Microsoft.Office.Interop.Excel.Worksheet

    dice por ejemplo en la primera "'applicatioclass' es ambiguo en el espacio de nombre de Microsoft.office.interop.excel"

    ResponderEliminar
    Respuestas
    1. hola que tal, lo que puedes hacer ante esos problemas es referencia la libreia de Excel, a veces esto pasa cuando el office instalado en la compu es 2010 o 2013
      lla ma a la libreria
      Microsoft Excel 15.0 Object Library para office 2013 y 14.0 para la version 2010

      Eliminar
    2. Recuerda borra los imports y hace la referencia en la pestaña COM

      Eliminar
    3. elimine los imports, agregue la referencias excel 12.0 y continua el error. estoy utilizando vb 2010

      Eliminar
  10. me sale este error: Al control DataGridView no se puede agregar ninguna fila que no tenga columnas. Las columnas se deben agregar primero.

    ResponderEliminar
    Respuestas
    1. No se como estará estructurado tus datos pero para exportar primero tienes que diseñar la grid con sus columnas como prefieras o si esta conectada a una data es más fácil porque la grid adquiere la estructura del dataset descarga mi ejm para quiste fijes bien del resto seguro lo intuiras

      Eliminar
  11. En versiones anteriores, cuando insertavas un data te aparecian por defaul herramientas muy necesarias como es el agregar, eliminar y algunas otras para navegar entre registros, Pregunta ¿Sabes como colocarlas nuevamente por defaul en VB 2012?

    ResponderEliminar
  12. te podria decir que han desaparecido esa opciones poruqe no son practicas imagina que tines 35.400 registros estas en 5to seria bien dificil desplazarte con esas herramientas

    ResponderEliminar
  13. YO SI PUEDO EXPORTAR PERO EN LA MAQUINA DONDE ESTOY HACIENDO EL PROGRAMA PERO CUANDO LO PASO A OTRA MAQUINA NO ME EXPORTA ME SALE UN ERROR

    ResponderEliminar
    Respuestas
    1. Deberias incluir la librería de excel que se referencia en el instalador o portable

      Eliminar
    2. Deberias incluir la librería de excel que se referencia en el instalador o portable

      Eliminar
  14. toy leyendo el código, no entiendo que hace el
    Dim blnFileOpen As Boolean = False
    Try
    Catch ex As Exception
    blnFileOpen = False
    End Try
    excel.Visible = True

    como que si estuviera asociado con un OpenFileDialog

    ResponderEliminar
    Respuestas
    1. tienes razón, estuve tratando de agregar un poco mas de código para que haga otras funciones y creo se me quedo disculpas a todos y gracias por la observación, buena observacion

      Eliminar
  15. Gracias desde El Salvador, este codigo meayudo mucho.

    ResponderEliminar

Publicar un comentario

Entradas populares de este blog

Imprimir directamente ReportViewer a impresora predeterminada

DevComponents DotnetBar 12.5.0.2

Metodo Iterativo Gauss-Seidel en Visual Basic