none
Como exportar datos desde DataGridView a EXCEL RRS feed

Respuestas

  • Hola.

    Puedes usar esta metodo, como ves tienes que pasarle un DataGridView como parametro y un titulo.

     private Sub ExportarDatosExcel(ByVal DataGridView1 As DataGridView, ByVal titulo As String)
            Dim m_Excel As New Excel.Application
            m_Excel.Cursor = Excel.XlMousePointer.xlWait
            m_Excel.Visible = True
            Dim objLibroExcel As Excel.Workbook = m_Excel.Workbooks.Add
            Dim objHojaExcel As Excel.Worksheet = objLibroExcel.Worksheets(1)
            With objHojaExcel
                .Visible = Excel.XlSheetVisibility.xlSheetVisible
                .Activate()
                'Encabezado  
                .Range("A1:L1").Merge()
                : .Range("A1:L1").Value = "BAUNER S.A."
                .Range("A1:L1").Font.Bold = True
                .Range("A1:L1").Font.Size = 15
                'Copete  
                .Range("A2:L2").Merge()
                .Range("A2:L2").Value = titulo
                .Range("A2:L2").Font.Bold = True
                .Range("A2:L2").Font.Size = 12
    
                Const primeraLetra As Char = "A"
                Const primerNumero As Short = 3
                Dim Letra As Char, UltimaLetra As Char
                Dim Numero As Integer, UltimoNumero As Integer
                Dim cod_letra As Byte = Asc(primeraLetra) - 1
                Dim sepDec As String = Application.CurrentCulture.NumberFormat.NumberDecimalSeparator
                Dim sepMil As String = Application.CurrentCulture.NumberFormat.NumberGroupSeparator
                'Establecer formatos de las columnas de la hija de cálculo  
                Dim strColumna As String = ""
                Dim LetraIzq As String = ""
                Dim cod_LetraIzq As Byte = Asc(primeraLetra) - 1
                Letra = primeraLetra
                Numero = primerNumero
                Dim objCelda As Excel.Range
                For Each c As DataGridViewColumn In DataGridView1.Columns
                    If c.Visible Then
                        If Letra = "Z" Then
                            Letra = primeraLetra
                            cod_letra = Asc(primeraLetra)
                            cod_LetraIzq += 1
                            LetraIzq = Chr(cod_LetraIzq)
                        Else
                            cod_letra += 1
                            Letra = Chr(cod_letra)
                        End If
                        strColumna = LetraIzq + Letra + Numero.ToString
                        objCelda = .Range(strColumna, Type.Missing)
                        objCelda.Value = c.HeaderText
                        objCelda.EntireColumn.Font.Size = 8
                        'objCelda.EntireColumn.NumberFormat = c.DefaultCellStyle.Format  
                        If c.ValueType Is GetType(Decimal) OrElse c.ValueType Is GetType(Double) Then
                            objCelda.EntireColumn.NumberFormat = "#" + sepMil + "0" + sepDec + "00"
                        End If
                    End If
                Next
    
                Dim objRangoEncab As Excel.Range = .Range(primeraLetra + Numero.ToString, LetraIzq + Letra + Numero.ToString)
                objRangoEncab.BorderAround(1, Excel.XlBorderWeight.xlMedium)
                UltimaLetra = Letra
                Dim UltimaLetraIzq As String = LetraIzq
    
                'CARGA DE DATOS  
                Dim i As Integer = Numero + 1
    
                For Each reg As DataGridViewRow In DataGridView1.Rows
                    LetraIzq = ""
                    cod_LetraIzq = Asc(primeraLetra) - 1
                    Letra = primeraLetra
                    cod_letra = Asc(primeraLetra) - 1
                    For Each c As DataGridViewColumn In DataGridView1.Columns
                        If c.Visible Then
                            If Letra = "Z" Then
                                Letra = primeraLetra
                                cod_letra = Asc(primeraLetra)
                                cod_LetraIzq += 1
                                LetraIzq = Chr(cod_LetraIzq)
                            Else
                                cod_letra += 1
                                Letra = Chr(cod_letra)
                            End If
                            strColumna = LetraIzq + Letra
                            ' acá debería realizarse la carga  
                            .Cells(i, strColumna) = IIf(IsDBNull(reg.ToString), "", reg.Cells(c.Index).Value)
                            '.Cells(i, strColumna) = IIf(IsDBNull(reg.(c.DataPropertyName)), c.DefaultCellStyle.NullValue, reg(c.DataPropertyName))  
                            '.Range(strColumna + i, strColumna + i).In()  
    
                        End If
                    Next
                    Dim objRangoReg As Excel.Range = .Range(primeraLetra + i.ToString, strColumna + i.ToString)
                    objRangoReg.Rows.BorderAround()
                    objRangoReg.Select()
                    i += 1
                Next
                UltimoNumero = i
    
                'Dibujar las líneas de las columnas  
                LetraIzq = ""
                cod_LetraIzq = Asc("A")
                cod_letra = Asc(primeraLetra)
                Letra = primeraLetra
                For Each c As DataGridViewColumn In DataGridView1.Columns
                    If c.Visible Then
                        objCelda = .Range(LetraIzq + Letra + primerNumero.ToString, LetraIzq + Letra + (UltimoNumero - 1).ToString)
                        objCelda.BorderAround()
                        If Letra = "Z" Then
                            Letra = primeraLetra
                            cod_letra = Asc(primeraLetra)
                            LetraIzq = Chr(cod_LetraIzq)
                            cod_LetraIzq += 1
                        Else
                            cod_letra += 1
                            Letra = Chr(cod_letra)
                        End If
                    End If
                Next
    
                'Dibujar el border exterior grueso  
                Dim objRango As Excel.Range = .Range(primeraLetra + primerNumero.ToString, UltimaLetraIzq + UltimaLetra + (UltimoNumero - 1).ToString)
                objRango.Select()
                objRango.Columns.AutoFit()
                objRango.Columns.BorderAround(1, Excel.XlBorderWeight.xlMedium)
            End With
    
            m_Excel.Cursor = Excel.XlMousePointer.xlDefault
        End Sub

    Asi llamarias al metodo dentro de tu boton exportar:

    ExportarDatosExcel(tuDataGridView, "el titulo que quieras darle")
    Saludos.


    Luis Muñoz Hidalgo
    Mi Blog
    Desarrollador de Software
    Trujillo-Perú


    miércoles, 6 de febrero de 2013 1:58
  • "Efrain Mejias C" preguntó:

    > Como exportar datos desde DataGridView a EXCEL

    Hola:

    Si el control DataGridView se encuentra enlazado a un origen de datos, como bien puede ser un objeto DataTable, en el siguiente artículo lo explico detalladamente:

    Cómo exportar a Excel el contenido de un objeto DataTable

    Un saludo

     


    Enrique Martínez
      [MS MVP - VB]

    Nota informativa: La información contenida en este mensaje, así como el código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin garantías de ninguna clase, y no otorga derecho alguno. Usted asume cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado o sugerido en el presente mensaje.

    Si esta respuesta le ha resultado útil, recuerde marcarla como satisfactoria.

    Si usas Visual Basic .NET y deseas ser productivo y feliz, activa la instrucción Option Strict.

    miércoles, 6 de febrero de 2013 6:47
    Moderador
  • Hola Efrain, te pasare mi codigo, a mi si me funciona, incluye formato: bordes, alineacion, combinacion de celdas, numeracoin de items en la primera columna, etc, sera cuestion que lo anañices, cualquier duda me lo comentas, espero sea de ayuda.

    Declaro mis variables públicas para exportar:

        Public wapp As Microsoft.Office.Interop.Excel.Application
        Public wsheet As Microsoft.Office.Interop.Excel.Worksheet
        Public wbook As Microsoft.Office.Interop.Excel.Workbook

    Luego en el formulario del codigo a exportar importo esto:

    Imports Excel = Microsoft.Office.Interop.Excel
    Imports Microsoft.Office.Interop

    Codigo:

                        wapp = New Microsoft.Office.Interop.Excel.Application
                        wbook = wapp.Workbooks.Add()
                        wsheet = wbook.ActiveSheet
                        Dim iX As Integer
                        Dim iY As Integer
                        Dim iC As Integer
                        '
                        'INSERTO: 
                        '---------------
                        'LA PRIMERA FILA
                        If LblTexto.Text = "Gratificaciones" Then
                            wsheet.Cells(1, 1).Value = LblTexto.Text & " - " & CboMes.Text & " del " & TxtAño.Text 'NOMBRE DEL REPORTE
                        ElseIf LblTexto.Text = "CTS" Then
                            wsheet.Cells(1, 1).Value = LblTexto.Text & " - " & CboMes.Text & " del " & TxtAño.Text 'NOMBRE DEL REPORTE
                        ElseIf Tabla = "VacacionesPorPeriodo" Then
                            wsheet.Cells(1, 1).Value = LblTexto.Text & " - " & CboMes.Text 'NOMBRE DEL REPORTE
                        ElseIf Tabla = "VacacionesTodos" Then
                            If CboTipo.SelectedIndex = 2 Then 'AMBOS
                                wsheet.Cells(1, 1).Value = LblTexto.Text & " - POR PLANILLA Y RECIBO" 'NOMBRE DEL REPORTE
                            Else
                                wsheet.Cells(1, 1).Value = LblTexto.Text & " - POR " & CboTipo.Text 'NOMBRE DEL REPORTE
                            End If
                        End If
                        wsheet.Range(wsheet.Cells(1, 1), wsheet.Cells(DgvLista.Rows.Count + 1, 1)).Font.Bold = True 'NEGRITA
                        wsheet.Range(wsheet.Cells(1, 1), wsheet.Cells(1, DgvLista.Columns.Count + 1)).Font.Size = 15 'TAMAÑO AL TITULO
                        'COMBINAR CELDAS
                        '-------------------------------------------
                        ' Seleccionas el rango q quieres combinar
                        wsheet.Range(wsheet.Cells(1, 1), wsheet.Cells(1, DgvLista.Columns.Count + 1)).Select()
                        ' Estableces MergeCells a True para combinar
                        ' Y false para descombinar las celdas
                        wapp.Selection.MergeCells = True
                        '-------------------------------------------
                        'FIN COMBINAR
                        'LA PRIMERA COLUMNA
                        wsheet.Cells(2, 1).Value = "Items"
                        'SUMO +2 PORQUE INSERTÉ AL INICIO 2 FILAS
                        wsheet.Range(wsheet.Cells(1, 1), wsheet.Cells(DgvLista.Rows.Count + 2, 1)).Font.Bold = True 'NEGRITA
                        '-------------------------------------------------------------------------------------------------------
                        '
                        'LLENO LOS NOMBRES DE LAS COLUMNAS CONFORME AL DATAGRIDVIEW, EMPEZANDO POR LA COLUMNA 2, DÁNDOLE NEGRITA
                        For iC = 0 To DgvLista.Columns.Count - 1
                            wsheet.Cells(2, iC + 2).Value = DgvLista.Columns(iC).HeaderText
                            wsheet.Cells(2, iC + 2).font.bold = True
                            '
                            wsheet.Columns(1).HorizontalAlignment = 3 'CENTRO LA COLUMNA 'ITEMS'
                            'FORMATO BAJO CONDICIONES
                            If LblTexto.Text = "Gratificaciones" Then
                                wsheet.Columns(2).NumberFormat = CStr("00000000") 'FORMATO PARA QUE RECONOZCA LOS CEROS'0'
                                wsheet.Columns(2).HorizontalAlignment = 3 'CENTRO
                                wsheet.Columns(3).HorizontalAlignment = 2 'IZQUIERDA
                                wsheet.Columns(4).HorizontalAlignment = 3 'CENTRO
                                For X As Integer = 7 To 15
                                    wsheet.Columns(X).NumberFormat = CStr("##,##0.00") 'FORMATO DECIMAL
                                Next
                            ElseIf LblTexto.Text = "CTS" Then
                                wsheet.Columns(2).NumberFormat = CStr("00000000") 'FORMATO PARA QUE RECONOZCA LOS CEROS'0'
                                wsheet.Columns(2).HorizontalAlignment = 3 'CENTRO
                                wsheet.Columns(3).HorizontalAlignment = 2 'IZQUIERDA
                                wsheet.Columns(4).HorizontalAlignment = 3 'CENTRO
                                wsheet.Columns(5).HorizontalAlignment = 3 'CENTRO
                                wsheet.Columns(6).HorizontalAlignment = 3 'CENTRO
                                wsheet.Columns(7).NumberFormat = CStr("00000000000000000000") 'FORMATO PARA QUE RECONOZCA LOS CEROS'0'
                                wsheet.Columns(7).HorizontalAlignment = 3 'CENTRO
                                wsheet.Columns(8).HorizontalAlignment = 3 'CENTRO
                                wsheet.Columns(9).HorizontalAlignment = 3 'CENTRO
                                For Y As Integer = 10 To 19
                                    wsheet.Columns(Y).NumberFormat = CStr("##,##0.00") 'FORMATO DECIMAL
                                Next
                            ElseIf LblTexto.Text = "Vacaciones por Periodo" Then
                                wsheet.Columns(2).NumberFormat = CStr("00000000") 'FORMATO PARA QUE RECONOZCA LOS CEROS'0'
                                wsheet.Columns(2).HorizontalAlignment = 3 'CENTRO
                                wsheet.Columns(3).HorizontalAlignment = 2 'IZQUIERDA
                                wsheet.Columns(4).HorizontalAlignment = 2 'IZQUIERDA
                                wsheet.Columns(5).HorizontalAlignment = 2 'IZQUIERDA
                                wsheet.Columns(6).HorizontalAlignment = 3 'CENTRO
                                wsheet.Columns(7).HorizontalAlignment = 2 'IZQUIERDA
                                wsheet.Columns(8).HorizontalAlignment = 3 'CENTRO
                                wsheet.Columns(9).HorizontalAlignment = 3 'CENTRO
                                wsheet.Columns(10).HorizontalAlignment = 3 'CENTRO
                            ElseIf LblTexto.Text = "Vacaciones Todos" Then
                                wsheet.Columns(2).NumberFormat = CStr("00000000") 'FORMATO PARA QUE RECONOZCA LOS CEROS'0'
                                wsheet.Columns(2).HorizontalAlignment = 3 'CENTRO
                                wsheet.Columns(3).HorizontalAlignment = 2 'IZQUIERDA
                                wsheet.Columns(4).HorizontalAlignment = 2 'IZQUIERDA
                                wsheet.Columns(5).HorizontalAlignment = 2 'IZQUIERDA
                                wsheet.Columns(6).HorizontalAlignment = 3 'CENTRO
                                wsheet.Columns(7).HorizontalAlignment = 2 'IZQUIERDA
                                wsheet.Columns(8).HorizontalAlignment = 3 'CENTRO
                                wsheet.Columns(9).HorizontalAlignment = 3 'CENTRO
                                wsheet.Columns(10).HorizontalAlignment = 3 'CENTRO
                            End If
                        Next
                        '
                        'INSERTO REGISTROS DEL DATAGRIVIEW ANTECEDIENDOLE LA COLUMNA DE ITEMS
                        For iX = 0 To DgvLista.Rows.Count - 1 'RECORRO "FILAS" -----------------------
                            wsheet.Cells(iX + 3, 1).value = iX + 1 'INCREMENTO ITEMS
                            For iY = 0 To DgvLista.Columns.Count - 1 'RECORRO "COLUMNAS" -----------------------
                                wsheet.Cells(iX + 3, iY + 2).value = DgvLista(iY, iX).Value.ToString
                            Next
                        Next
                        'LE SUMO '+ 1' PORQUE SE HA AGREGADO LA COLUMNA 'ITEMS'
                        With wsheet.Range(wsheet.Cells(1, 1), wsheet.Cells(2, DgvLista.Columns.Count + 1))
                            .HorizontalAlignment = 3 'CENTRO COLUMNAS
                            .Interior.ColorIndex = 20 'COLOR CELDA, (20) COLOR CELESTE
                        End With
                        '
                        'COLOR A LOS ITEMS
                        wsheet.Range(wsheet.Cells(1, 1), wsheet.Cells(DgvLista.Rows.Count + 2, 1)).Interior.ColorIndex = 20 'SUMO +2 PORQUE INSERTE AL INICIO 2 FILAS
                        '---------- RANGO("            A  1 ,              FILAS(N)                        COLUMNAS(N)        ")
                        '-------------------------------------------------------------------------------------------------------
                        wsheet.Range(wsheet.Cells(2, 1), wsheet.Cells(DgvLista.Rows.Count + 2, DgvLista.Columns.Count + 1)).Font.Size = 8 'TAMAÑO DE LETRA
                        With wsheet.Range(wsheet.Cells(1, 1), wsheet.Cells(DgvLista.Rows.Count + 2, DgvLista.Columns.Count + 1)) 'SUMO +2 PORQUE INSERTE AL INICIO 2 FILAS
                            'CREAR BORDES
                            '-----------------------------------------------------------------------
                            With .Borders(Microsoft.Office.Interop.Excel.XlBordersIndex.xlEdgeLeft)
                                .LineStyle = Microsoft.Office.Interop.Excel.XlLineStyle.xlDouble
                                .ColorIndex = 0
                                .TintAndShade = 0
                                .Weight = Microsoft.Office.Interop.Excel.XlBorderWeight.xlThin
                            End With
                            With .Borders(Microsoft.Office.Interop.Excel.XlBordersIndex.xlEdgeTop)
                                .LineStyle = Microsoft.Office.Interop.Excel.XlLineStyle.xlContinuous
                                .ColorIndex = 0
                                .TintAndShade = 0
                                .Weight = Microsoft.Office.Interop.Excel.XlBorderWeight.xlThin
                            End With
                            With .Borders(Microsoft.Office.Interop.Excel.XlBordersIndex.xlEdgeBottom)
                                .LineStyle = Microsoft.Office.Interop.Excel.XlLineStyle.xlContinuous
                                .ColorIndex = 0
                                .TintAndShade = 0
                                .Weight = Microsoft.Office.Interop.Excel.XlBorderWeight.xlThin
                            End With
                            With .Borders(Microsoft.Office.Interop.Excel.XlBordersIndex.xlEdgeRight)
                                .LineStyle = Microsoft.Office.Interop.Excel.XlLineStyle.xlContinuous
                                .ColorIndex = 0
                                .TintAndShade = 0
                                .Weight = Microsoft.Office.Interop.Excel.XlBorderWeight.xlThin
                            End With
                            With .Borders(Microsoft.Office.Interop.Excel.XlBordersIndex.xlInsideVertical)
                                .LineStyle = Microsoft.Office.Interop.Excel.XlLineStyle.xlContinuous
                                .ColorIndex = 0
                                .TintAndShade = 0
                                .Weight = Microsoft.Office.Interop.Excel.XlBorderWeight.xlThin
                            End With
                            With .Borders(Microsoft.Office.Interop.Excel.XlBordersIndex.xlInsideHorizontal)
                                .LineStyle = Microsoft.Office.Interop.Excel.XlLineStyle.xlContinuous
                                .ColorIndex = 0
                                .TintAndShade = 0
                                .Weight = Microsoft.Office.Interop.Excel.XlBorderWeight.xlThin
                            End With
                            'FIN BORDES -----------------------------------------
                        End With
                        '
                        wsheet.Columns.AutoFit()
                        wapp.Visible = True


    jueves, 7 de febrero de 2013 22:44

Todas las respuestas

  • Hola.

    Puedes usar esta metodo, como ves tienes que pasarle un DataGridView como parametro y un titulo.

     private Sub ExportarDatosExcel(ByVal DataGridView1 As DataGridView, ByVal titulo As String)
            Dim m_Excel As New Excel.Application
            m_Excel.Cursor = Excel.XlMousePointer.xlWait
            m_Excel.Visible = True
            Dim objLibroExcel As Excel.Workbook = m_Excel.Workbooks.Add
            Dim objHojaExcel As Excel.Worksheet = objLibroExcel.Worksheets(1)
            With objHojaExcel
                .Visible = Excel.XlSheetVisibility.xlSheetVisible
                .Activate()
                'Encabezado  
                .Range("A1:L1").Merge()
                : .Range("A1:L1").Value = "BAUNER S.A."
                .Range("A1:L1").Font.Bold = True
                .Range("A1:L1").Font.Size = 15
                'Copete  
                .Range("A2:L2").Merge()
                .Range("A2:L2").Value = titulo
                .Range("A2:L2").Font.Bold = True
                .Range("A2:L2").Font.Size = 12
    
                Const primeraLetra As Char = "A"
                Const primerNumero As Short = 3
                Dim Letra As Char, UltimaLetra As Char
                Dim Numero As Integer, UltimoNumero As Integer
                Dim cod_letra As Byte = Asc(primeraLetra) - 1
                Dim sepDec As String = Application.CurrentCulture.NumberFormat.NumberDecimalSeparator
                Dim sepMil As String = Application.CurrentCulture.NumberFormat.NumberGroupSeparator
                'Establecer formatos de las columnas de la hija de cálculo  
                Dim strColumna As String = ""
                Dim LetraIzq As String = ""
                Dim cod_LetraIzq As Byte = Asc(primeraLetra) - 1
                Letra = primeraLetra
                Numero = primerNumero
                Dim objCelda As Excel.Range
                For Each c As DataGridViewColumn In DataGridView1.Columns
                    If c.Visible Then
                        If Letra = "Z" Then
                            Letra = primeraLetra
                            cod_letra = Asc(primeraLetra)
                            cod_LetraIzq += 1
                            LetraIzq = Chr(cod_LetraIzq)
                        Else
                            cod_letra += 1
                            Letra = Chr(cod_letra)
                        End If
                        strColumna = LetraIzq + Letra + Numero.ToString
                        objCelda = .Range(strColumna, Type.Missing)
                        objCelda.Value = c.HeaderText
                        objCelda.EntireColumn.Font.Size = 8
                        'objCelda.EntireColumn.NumberFormat = c.DefaultCellStyle.Format  
                        If c.ValueType Is GetType(Decimal) OrElse c.ValueType Is GetType(Double) Then
                            objCelda.EntireColumn.NumberFormat = "#" + sepMil + "0" + sepDec + "00"
                        End If
                    End If
                Next
    
                Dim objRangoEncab As Excel.Range = .Range(primeraLetra + Numero.ToString, LetraIzq + Letra + Numero.ToString)
                objRangoEncab.BorderAround(1, Excel.XlBorderWeight.xlMedium)
                UltimaLetra = Letra
                Dim UltimaLetraIzq As String = LetraIzq
    
                'CARGA DE DATOS  
                Dim i As Integer = Numero + 1
    
                For Each reg As DataGridViewRow In DataGridView1.Rows
                    LetraIzq = ""
                    cod_LetraIzq = Asc(primeraLetra) - 1
                    Letra = primeraLetra
                    cod_letra = Asc(primeraLetra) - 1
                    For Each c As DataGridViewColumn In DataGridView1.Columns
                        If c.Visible Then
                            If Letra = "Z" Then
                                Letra = primeraLetra
                                cod_letra = Asc(primeraLetra)
                                cod_LetraIzq += 1
                                LetraIzq = Chr(cod_LetraIzq)
                            Else
                                cod_letra += 1
                                Letra = Chr(cod_letra)
                            End If
                            strColumna = LetraIzq + Letra
                            ' acá debería realizarse la carga  
                            .Cells(i, strColumna) = IIf(IsDBNull(reg.ToString), "", reg.Cells(c.Index).Value)
                            '.Cells(i, strColumna) = IIf(IsDBNull(reg.(c.DataPropertyName)), c.DefaultCellStyle.NullValue, reg(c.DataPropertyName))  
                            '.Range(strColumna + i, strColumna + i).In()  
    
                        End If
                    Next
                    Dim objRangoReg As Excel.Range = .Range(primeraLetra + i.ToString, strColumna + i.ToString)
                    objRangoReg.Rows.BorderAround()
                    objRangoReg.Select()
                    i += 1
                Next
                UltimoNumero = i
    
                'Dibujar las líneas de las columnas  
                LetraIzq = ""
                cod_LetraIzq = Asc("A")
                cod_letra = Asc(primeraLetra)
                Letra = primeraLetra
                For Each c As DataGridViewColumn In DataGridView1.Columns
                    If c.Visible Then
                        objCelda = .Range(LetraIzq + Letra + primerNumero.ToString, LetraIzq + Letra + (UltimoNumero - 1).ToString)
                        objCelda.BorderAround()
                        If Letra = "Z" Then
                            Letra = primeraLetra
                            cod_letra = Asc(primeraLetra)
                            LetraIzq = Chr(cod_LetraIzq)
                            cod_LetraIzq += 1
                        Else
                            cod_letra += 1
                            Letra = Chr(cod_letra)
                        End If
                    End If
                Next
    
                'Dibujar el border exterior grueso  
                Dim objRango As Excel.Range = .Range(primeraLetra + primerNumero.ToString, UltimaLetraIzq + UltimaLetra + (UltimoNumero - 1).ToString)
                objRango.Select()
                objRango.Columns.AutoFit()
                objRango.Columns.BorderAround(1, Excel.XlBorderWeight.xlMedium)
            End With
    
            m_Excel.Cursor = Excel.XlMousePointer.xlDefault
        End Sub

    Asi llamarias al metodo dentro de tu boton exportar:

    ExportarDatosExcel(tuDataGridView, "el titulo que quieras darle")
    Saludos.


    Luis Muñoz Hidalgo
    Mi Blog
    Desarrollador de Software
    Trujillo-Perú


    miércoles, 6 de febrero de 2013 1:58
  • Gracias Luis -----voy a ponerlo a prueba----

    revisa este posr a ver si tu sabes

    http://social.msdn.microsoft.com/Forums/es-ES/vbes/thread/7271358e-50f1-4ec9-b224-3b13609b9920


    EFRAIN MEJIAS C VALENCIA - VENEZUELA

    miércoles, 6 de febrero de 2013 2:13
  • "Efrain Mejias C" preguntó:

    > Como exportar datos desde DataGridView a EXCEL

    Hola:

    Si el control DataGridView se encuentra enlazado a un origen de datos, como bien puede ser un objeto DataTable, en el siguiente artículo lo explico detalladamente:

    Cómo exportar a Excel el contenido de un objeto DataTable

    Un saludo

     


    Enrique Martínez
      [MS MVP - VB]

    Nota informativa: La información contenida en este mensaje, así como el código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin garantías de ninguna clase, y no otorga derecho alguno. Usted asume cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado o sugerido en el presente mensaje.

    Si esta respuesta le ha resultado útil, recuerde marcarla como satisfactoria.

    Si usas Visual Basic .NET y deseas ser productivo y feliz, activa la instrucción Option Strict.

    miércoles, 6 de febrero de 2013 6:47
    Moderador
  • No olvides marcar como respuesta, si mi respuesta resolvio tus dudas. Para asi cerrar el hilo.

    Luis Muñoz Hidalgo
    Mi Blog
    Desarrollador de Software
    Trujillo-Perú


    jueves, 7 de febrero de 2013 20:06
  • Tranquilo luis ....En lo que termine por completo yo marco como respuesta mientras nesecito que derrepente otros usuaris dejen sus puntos de vista.....

    EFRAIN MEJIAS C VALENCIA - VENEZUELA

    jueves, 7 de febrero de 2013 22:18
  • Hola Efrain, te pasare mi codigo, a mi si me funciona, incluye formato: bordes, alineacion, combinacion de celdas, numeracoin de items en la primera columna, etc, sera cuestion que lo anañices, cualquier duda me lo comentas, espero sea de ayuda.

    Declaro mis variables públicas para exportar:

        Public wapp As Microsoft.Office.Interop.Excel.Application
        Public wsheet As Microsoft.Office.Interop.Excel.Worksheet
        Public wbook As Microsoft.Office.Interop.Excel.Workbook

    Luego en el formulario del codigo a exportar importo esto:

    Imports Excel = Microsoft.Office.Interop.Excel
    Imports Microsoft.Office.Interop

    Codigo:

                        wapp = New Microsoft.Office.Interop.Excel.Application
                        wbook = wapp.Workbooks.Add()
                        wsheet = wbook.ActiveSheet
                        Dim iX As Integer
                        Dim iY As Integer
                        Dim iC As Integer
                        '
                        'INSERTO: 
                        '---------------
                        'LA PRIMERA FILA
                        If LblTexto.Text = "Gratificaciones" Then
                            wsheet.Cells(1, 1).Value = LblTexto.Text & " - " & CboMes.Text & " del " & TxtAño.Text 'NOMBRE DEL REPORTE
                        ElseIf LblTexto.Text = "CTS" Then
                            wsheet.Cells(1, 1).Value = LblTexto.Text & " - " & CboMes.Text & " del " & TxtAño.Text 'NOMBRE DEL REPORTE
                        ElseIf Tabla = "VacacionesPorPeriodo" Then
                            wsheet.Cells(1, 1).Value = LblTexto.Text & " - " & CboMes.Text 'NOMBRE DEL REPORTE
                        ElseIf Tabla = "VacacionesTodos" Then
                            If CboTipo.SelectedIndex = 2 Then 'AMBOS
                                wsheet.Cells(1, 1).Value = LblTexto.Text & " - POR PLANILLA Y RECIBO" 'NOMBRE DEL REPORTE
                            Else
                                wsheet.Cells(1, 1).Value = LblTexto.Text & " - POR " & CboTipo.Text 'NOMBRE DEL REPORTE
                            End If
                        End If
                        wsheet.Range(wsheet.Cells(1, 1), wsheet.Cells(DgvLista.Rows.Count + 1, 1)).Font.Bold = True 'NEGRITA
                        wsheet.Range(wsheet.Cells(1, 1), wsheet.Cells(1, DgvLista.Columns.Count + 1)).Font.Size = 15 'TAMAÑO AL TITULO
                        'COMBINAR CELDAS
                        '-------------------------------------------
                        ' Seleccionas el rango q quieres combinar
                        wsheet.Range(wsheet.Cells(1, 1), wsheet.Cells(1, DgvLista.Columns.Count + 1)).Select()
                        ' Estableces MergeCells a True para combinar
                        ' Y false para descombinar las celdas
                        wapp.Selection.MergeCells = True
                        '-------------------------------------------
                        'FIN COMBINAR
                        'LA PRIMERA COLUMNA
                        wsheet.Cells(2, 1).Value = "Items"
                        'SUMO +2 PORQUE INSERTÉ AL INICIO 2 FILAS
                        wsheet.Range(wsheet.Cells(1, 1), wsheet.Cells(DgvLista.Rows.Count + 2, 1)).Font.Bold = True 'NEGRITA
                        '-------------------------------------------------------------------------------------------------------
                        '
                        'LLENO LOS NOMBRES DE LAS COLUMNAS CONFORME AL DATAGRIDVIEW, EMPEZANDO POR LA COLUMNA 2, DÁNDOLE NEGRITA
                        For iC = 0 To DgvLista.Columns.Count - 1
                            wsheet.Cells(2, iC + 2).Value = DgvLista.Columns(iC).HeaderText
                            wsheet.Cells(2, iC + 2).font.bold = True
                            '
                            wsheet.Columns(1).HorizontalAlignment = 3 'CENTRO LA COLUMNA 'ITEMS'
                            'FORMATO BAJO CONDICIONES
                            If LblTexto.Text = "Gratificaciones" Then
                                wsheet.Columns(2).NumberFormat = CStr("00000000") 'FORMATO PARA QUE RECONOZCA LOS CEROS'0'
                                wsheet.Columns(2).HorizontalAlignment = 3 'CENTRO
                                wsheet.Columns(3).HorizontalAlignment = 2 'IZQUIERDA
                                wsheet.Columns(4).HorizontalAlignment = 3 'CENTRO
                                For X As Integer = 7 To 15
                                    wsheet.Columns(X).NumberFormat = CStr("##,##0.00") 'FORMATO DECIMAL
                                Next
                            ElseIf LblTexto.Text = "CTS" Then
                                wsheet.Columns(2).NumberFormat = CStr("00000000") 'FORMATO PARA QUE RECONOZCA LOS CEROS'0'
                                wsheet.Columns(2).HorizontalAlignment = 3 'CENTRO
                                wsheet.Columns(3).HorizontalAlignment = 2 'IZQUIERDA
                                wsheet.Columns(4).HorizontalAlignment = 3 'CENTRO
                                wsheet.Columns(5).HorizontalAlignment = 3 'CENTRO
                                wsheet.Columns(6).HorizontalAlignment = 3 'CENTRO
                                wsheet.Columns(7).NumberFormat = CStr("00000000000000000000") 'FORMATO PARA QUE RECONOZCA LOS CEROS'0'
                                wsheet.Columns(7).HorizontalAlignment = 3 'CENTRO
                                wsheet.Columns(8).HorizontalAlignment = 3 'CENTRO
                                wsheet.Columns(9).HorizontalAlignment = 3 'CENTRO
                                For Y As Integer = 10 To 19
                                    wsheet.Columns(Y).NumberFormat = CStr("##,##0.00") 'FORMATO DECIMAL
                                Next
                            ElseIf LblTexto.Text = "Vacaciones por Periodo" Then
                                wsheet.Columns(2).NumberFormat = CStr("00000000") 'FORMATO PARA QUE RECONOZCA LOS CEROS'0'
                                wsheet.Columns(2).HorizontalAlignment = 3 'CENTRO
                                wsheet.Columns(3).HorizontalAlignment = 2 'IZQUIERDA
                                wsheet.Columns(4).HorizontalAlignment = 2 'IZQUIERDA
                                wsheet.Columns(5).HorizontalAlignment = 2 'IZQUIERDA
                                wsheet.Columns(6).HorizontalAlignment = 3 'CENTRO
                                wsheet.Columns(7).HorizontalAlignment = 2 'IZQUIERDA
                                wsheet.Columns(8).HorizontalAlignment = 3 'CENTRO
                                wsheet.Columns(9).HorizontalAlignment = 3 'CENTRO
                                wsheet.Columns(10).HorizontalAlignment = 3 'CENTRO
                            ElseIf LblTexto.Text = "Vacaciones Todos" Then
                                wsheet.Columns(2).NumberFormat = CStr("00000000") 'FORMATO PARA QUE RECONOZCA LOS CEROS'0'
                                wsheet.Columns(2).HorizontalAlignment = 3 'CENTRO
                                wsheet.Columns(3).HorizontalAlignment = 2 'IZQUIERDA
                                wsheet.Columns(4).HorizontalAlignment = 2 'IZQUIERDA
                                wsheet.Columns(5).HorizontalAlignment = 2 'IZQUIERDA
                                wsheet.Columns(6).HorizontalAlignment = 3 'CENTRO
                                wsheet.Columns(7).HorizontalAlignment = 2 'IZQUIERDA
                                wsheet.Columns(8).HorizontalAlignment = 3 'CENTRO
                                wsheet.Columns(9).HorizontalAlignment = 3 'CENTRO
                                wsheet.Columns(10).HorizontalAlignment = 3 'CENTRO
                            End If
                        Next
                        '
                        'INSERTO REGISTROS DEL DATAGRIVIEW ANTECEDIENDOLE LA COLUMNA DE ITEMS
                        For iX = 0 To DgvLista.Rows.Count - 1 'RECORRO "FILAS" -----------------------
                            wsheet.Cells(iX + 3, 1).value = iX + 1 'INCREMENTO ITEMS
                            For iY = 0 To DgvLista.Columns.Count - 1 'RECORRO "COLUMNAS" -----------------------
                                wsheet.Cells(iX + 3, iY + 2).value = DgvLista(iY, iX).Value.ToString
                            Next
                        Next
                        'LE SUMO '+ 1' PORQUE SE HA AGREGADO LA COLUMNA 'ITEMS'
                        With wsheet.Range(wsheet.Cells(1, 1), wsheet.Cells(2, DgvLista.Columns.Count + 1))
                            .HorizontalAlignment = 3 'CENTRO COLUMNAS
                            .Interior.ColorIndex = 20 'COLOR CELDA, (20) COLOR CELESTE
                        End With
                        '
                        'COLOR A LOS ITEMS
                        wsheet.Range(wsheet.Cells(1, 1), wsheet.Cells(DgvLista.Rows.Count + 2, 1)).Interior.ColorIndex = 20 'SUMO +2 PORQUE INSERTE AL INICIO 2 FILAS
                        '---------- RANGO("            A  1 ,              FILAS(N)                        COLUMNAS(N)        ")
                        '-------------------------------------------------------------------------------------------------------
                        wsheet.Range(wsheet.Cells(2, 1), wsheet.Cells(DgvLista.Rows.Count + 2, DgvLista.Columns.Count + 1)).Font.Size = 8 'TAMAÑO DE LETRA
                        With wsheet.Range(wsheet.Cells(1, 1), wsheet.Cells(DgvLista.Rows.Count + 2, DgvLista.Columns.Count + 1)) 'SUMO +2 PORQUE INSERTE AL INICIO 2 FILAS
                            'CREAR BORDES
                            '-----------------------------------------------------------------------
                            With .Borders(Microsoft.Office.Interop.Excel.XlBordersIndex.xlEdgeLeft)
                                .LineStyle = Microsoft.Office.Interop.Excel.XlLineStyle.xlDouble
                                .ColorIndex = 0
                                .TintAndShade = 0
                                .Weight = Microsoft.Office.Interop.Excel.XlBorderWeight.xlThin
                            End With
                            With .Borders(Microsoft.Office.Interop.Excel.XlBordersIndex.xlEdgeTop)
                                .LineStyle = Microsoft.Office.Interop.Excel.XlLineStyle.xlContinuous
                                .ColorIndex = 0
                                .TintAndShade = 0
                                .Weight = Microsoft.Office.Interop.Excel.XlBorderWeight.xlThin
                            End With
                            With .Borders(Microsoft.Office.Interop.Excel.XlBordersIndex.xlEdgeBottom)
                                .LineStyle = Microsoft.Office.Interop.Excel.XlLineStyle.xlContinuous
                                .ColorIndex = 0
                                .TintAndShade = 0
                                .Weight = Microsoft.Office.Interop.Excel.XlBorderWeight.xlThin
                            End With
                            With .Borders(Microsoft.Office.Interop.Excel.XlBordersIndex.xlEdgeRight)
                                .LineStyle = Microsoft.Office.Interop.Excel.XlLineStyle.xlContinuous
                                .ColorIndex = 0
                                .TintAndShade = 0
                                .Weight = Microsoft.Office.Interop.Excel.XlBorderWeight.xlThin
                            End With
                            With .Borders(Microsoft.Office.Interop.Excel.XlBordersIndex.xlInsideVertical)
                                .LineStyle = Microsoft.Office.Interop.Excel.XlLineStyle.xlContinuous
                                .ColorIndex = 0
                                .TintAndShade = 0
                                .Weight = Microsoft.Office.Interop.Excel.XlBorderWeight.xlThin
                            End With
                            With .Borders(Microsoft.Office.Interop.Excel.XlBordersIndex.xlInsideHorizontal)
                                .LineStyle = Microsoft.Office.Interop.Excel.XlLineStyle.xlContinuous
                                .ColorIndex = 0
                                .TintAndShade = 0
                                .Weight = Microsoft.Office.Interop.Excel.XlBorderWeight.xlThin
                            End With
                            'FIN BORDES -----------------------------------------
                        End With
                        '
                        wsheet.Columns.AutoFit()
                        wapp.Visible = True


    jueves, 7 de febrero de 2013 22:44
  • Uno de los mejores y más rápidos métodos que je visto (y usado) es este que presenta Beth Massi:

    Crear Excel usando LinQ to XML

    Que fácilmente se puede adaptar usando un datatable o el mismo DataGridView


    • Editado jerryeagle viernes, 8 de febrero de 2013 8:27
    viernes, 8 de febrero de 2013 8:26