Exportar nombre de columnas de un MSHFLEXGRID a Excel

Colapsar
X
  • Filtrar
  • Tiempo
  • Mostrar
Limpiar todos
nuevos mensajes

  • Exportar nombre de columnas de un MSHFLEXGRID a Excel

    Buenas tardes señores, necesito su ayuda con lo siguiente:

    Al momento de exportar el contenido de un MSHFLEXGRID a un archivo de Excel no tengo ningun problema, pero necesito que tambien se exporten los nombres de las columnas, por ejemplo:

    NOMBRE APELLIDO
    Carlos Castro
    Juan Molina
    Pedro Perez

    Al exportar esos datos las lineas con los nombres y apellidos se incluyen sin ningun problema, pero los encabezados NOMBRE y APELLIDO no, por lo que les agradecere mucho si me ayudan con este problema.

    Les adjunto el codigo que utilizo para realizar la exportacion a Excel:

    Private Sub Boton_Exportar_Click()

    Grid1.Col = 0
    Grid1.Row = 1

    If Grid1.Text = "" Then

    MsgBox ("No hay datos para exportar")

    Exit Sub

    Else

    'CD1.FileName = "Total Ventas"

    Dim Archivo, i

    CD1.CancelError = True
    On Error GoTo ErrHandler


    xxx = 1
    Dim todo, dia, mes, ano As String
    todo = Date
    dia = Mid(todo, 1, 2)
    mes = Mid(todo, 4, 2)
    ano = Mid(todo, 7, 4)
    CD1.FileName = "Total Ventas " & dia & "_" & mes & "_" & ano
    CD1.ShowSave

    Archivo = CD1.Copies

    For i = 1 To Archivo
    'Código para enviar los datos a exportar

    Next i

    If Exportar_Excel(CD1.FileName & ".xls", Grid1) Then
    MsgBox "Datos exportados correctamente", vbInformation
    End If

    End If

    Exit Sub

    ErrHandler:
    'El usuario ha hecho clic en el botón Cancelar
    Exit Sub

    End Sub

    Y este es el codigo de la funcion:

    Public Function Exportar_Excel(sOutputPath As String, FlexGrid As Object) As Boolean

    On Error GoTo Error_Handler

    Dim o_Excel As Object
    Dim o_Libro As Object
    Dim o_Hoja As Object
    Dim fila As Long
    Dim Columna As Long

    ProgressBar1.Min = 1
    ProgressBar1.Max = Grid1.Rows - 1

    ' -- Crea el objeto Excel, el objeto workBook y el objeto sheet
    Set o_Excel = CreateObject("Excel.Application")
    Set o_Libro = o_Excel.Workbooks.Add
    Set o_Hoja = o_Libro.Worksheets.Add

    ' -- Bucle para Exportar los datos
    With FlexGrid
    For fila = 1 To .Rows - 1

    'ProgressBar
    ProgressBar1.Value = fila

    For Columna = 0 To .Cols - 1
    o_Hoja.Cells(fila, Columna + 1).Value = .TextMatrix(fila, Columna)
    Next
    Next
    End With
    o_Libro.Close True, sOutputPath
    ' -- Cerrar Excel
    o_Excel.Quit
    ' -- Terminar instancias
    Call ReleaseObjects(o_Excel, o_Libro, o_Hoja)
    Exportar_Excel = True
    Exit Function

    ' -- Controlador de Errores
    Error_Handler:
    ' -- Cierra la hoja y el la aplicación Excel
    If Not o_Libro Is Nothing Then: o_Libro.Close False
    If Not o_Excel Is Nothing Then: o_Excel.Quit
    Call ReleaseObjects(o_Excel, o_Libro, o_Hoja)
    If Err.Number <> 1004 Then MsgBox Err.Description, vbCritical
    End Function

    ' \\ -- Eliminar objetos para liberar recursos
    ' -------------------------------------------------------------------
    Private Sub ReleaseObjects(o_Excel As Object, o_Libro As Object, o_Hoja As Object)
    If Not o_Excel Is Nothing Then Set o_Excel = Nothing
    If Not o_Libro Is Nothing Then Set o_Libro = Nothing
    If Not o_Hoja Is Nothing Then Set o_Hoja = Nothing
    End Sub

    Agradecere muchisimo su ayuda con este problema.

    Saludos cordiales.

  • #2
    Re: Exportar nombre de columnas de un MSHFLEXGRID a Excel

    Hola, no se si se podrá exportar el nombre de las columnas, imagino que si.

    Pero a falta de saber si se pueden exportar, lo que se me ocurre es crear nosotros mismos mediante código los nombres de las columnas en el archivo excel antes de exportar los datos.

    Pon este código justo antes del bucle para exportar los datos.

    Código:
     
        ' Crea los nombres de la columnas
        o_Hoja.Range("A1").Select: o_Hoja.Range("A1") = "NOMBRE"
        o_Hoja.Range("B1").Select: o_Hoja.Range("B1") = "APELLIDO"
        o_Hoja.Range("C1").Select: o_Hoja.Range("C1") = "DIRECCION"
        o_Hoja.Range("D1").Select: o_Hoja.Range("D1") = "EMAIL"
    Y en el bucle para exportar los datos cambia esta línea por esta otra.

    Código:
      o_Hoja.Cells(fila, Columna + 1).Value = .TextMatrix(fila, Columna)
    Código:
      o_Hoja.Cells(fila + 1, Columna + 1).Value = .TextMatrix(fila, Columna)
    Con esto le estamos diciendo que empiece a escribir los datos en la fila 2 del archivo excel, con el fin de que no nos sobrescriba los encabezados creados anteriormente.

    Un saludo.

    Comentario


    • #3
      Re: Exportar nombre de columnas de un MSHFLEXGRID a Excel

      Pues estuve mirando si se podía hacer lo que pedías y se me ocurrió esto:

      Pon este código justo antes del bucle para exportar los datos.

      Código:
       
          Dim EncColumna     As Long
       
          ' -- Bucle para Exportar los encabezados
          With FlexGrid
               For EncColumna = 0 To .Cols - 1
                   o_Hoja.Cells(1, EncColumna + 1).Value = .TextMatrix(0, EncColumna)
               Next
          End With
      Así exportaras los encabezados de las columnas.


      Y como antes en el bucle para exportar los datos cambia esta línea.

      Código:
       
      o_Hoja.Cells(fila, Columna + 1).Value = .TextMatrix(fila, Columna)
      Por es otra

      Código:
       
      o_Hoja.Cells(fila + 1, Columna + 1).Value = .TextMatrix(fila, Columna)
      un saludo.
      Última edición por Alon555; 29-03-2014, 06:27 PM.

      Comentario


      • #4
        Re: Exportar nombre de columnas de un MSHFLEXGRID a Excel

        Hola samiraxl, con las soluciones aportadas por Alon555, podemos hacer:
        Código:
        For fila = 0 To .Rows - 1
        
        'ProgressBar
        ProgressBar1.Value = fila
        
        For Columna = 0 To .Cols - 1
        o_Hoja.Cells(fila + 1, Columna + 1).Value = .TextMatrix(fila, Columna)
        Saludos.

        Comentario


        • #5
          Re: Exportar nombre de columnas de un MSHFLEXGRID a Excel

          Buenas tardes, muchas gracias a los 2 por su ayuda y la solucion que me sirvio de forma perfecta fue la de Alon555, muchisimas gracias Alon, con esto puedo exportar los nombre de las columnas de los MSHFLEXGRID junto con el contenido de las mismas.

          Era algo que estuve buscando desde hace mucho tiempo, esto me ayudara en gran manera para la presentacion adecuada de la informacion generada por mis sistemas que he desarrollado.

          Nuevamente muchas gracias de todo corazon a todos ustedes.

          Espero contar con su ayua nuevamente en el futuro.

          Comentario

          Trabajando...
          X