elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Guía rápida para descarga de herramientas gratuitas de seguridad y desinfección


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP)
| | | |-+  Programación Visual Basic (Moderadores: LeandroA, seba123neo)
| | | | |-+  Como exportar MSHFlexgrid1 a Excel? - Expertos en vb6.0
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: Como exportar MSHFlexgrid1 a Excel? - Expertos en vb6.0  (Leído 11,086 veces)
hunter18

Desconectado Desconectado

Mensajes: 202


Ver Perfil
Como exportar MSHFlexgrid1 a Excel? - Expertos en vb6.0
« en: 17 Junio 2010, 22:27 pm »

Tengo un codigo y funciona bien pero cuando el MSHFlexgrid1 tiene agrupaciones como en la imagen solo me imprime los encabezados Procesadores, Monitores, Televisores que pertenecen a la tabla categoria.



Código:
Dim rs As New ADODB.Recordset
Dim cn As New ADODB.Connection

Private Sub Command1_Click()

sSQL = "SHAPE {SELECT codcat,nomcat FROM categoria} AS CABECERA " & _
"APPEND ({SELECT codprod,nomprod,codcat FROM producto} AS DETALLE " & _
"RELATE codcat TO codcat) AS DETALLE"

rs.StayInSync = False
'cn.Open "Provider=MSDataShape.1;Extended Properties=Jet OLEDB:Database Password=;Persist Security Info=False;Data Source=c:\bd_01.mdb;Data Provider=MICROSOFT.JET.OLEDB.4.0"
 cn.Open "Provider=MSDataShape.1;Extended Properties=Jet OLEDB:Database Password=;Persist Security Info=False;Data Source=" & App.Path & "\bd_01.mdb;Data Provider=MICROSOFT.JET.OLEDB.4.0"
    
rs.Open sSQL, cn

Set MSHFlexGrid1.DataSource = rs

End Sub

Código:
Private Sub Command2_Click()
Call Exportar_HFlexgrid(App.Path & "\excel1.xls", MSHFlexGrid1)
End Sub


' -------------------------------------------------------------------------------------------
' \\ -- Función para crear un nuevo libro con el contenido del Grid
' -------------------------------------------------------------------------------------------
Public Function Exportar_HFlexgrid(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
      
    ' -- 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
            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_HFlexgrid = 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







« Última modificación: 17 Junio 2010, 22:29 pm por hunter18 » En línea

karmany
Colaborador
***
Desconectado Desconectado

Mensajes: 1.615


Sueñas que sueñas


Ver Perfil WWW
Re: Como exportar MSHFlexgrid1 a Excel? - Expertos en vb6.0
« Respuesta #1 en: 19 Junio 2010, 02:17 am »

Prueba a modificar la propiedad del MSHFlexgrid: .MergeCells = flexMergeFree
Si le pones la propiedad sin combinar creo que te dará correcto, pero la presentación del control no será la adecuada.

¿Cómo haces para que te salga a la izquierda el + o - para expandir o contraer las filas? No sé si será una propiedad pues yo he modificado creo que todas y no lo logro, pero es posible que tu problema tenga que ver con eso.


En línea

hunter18

Desconectado Desconectado

Mensajes: 202


Ver Perfil
Re: Como exportar MSHFlexgrid1 a Excel? - Expertos en vb6.0
« Respuesta #2 en: 19 Junio 2010, 03:43 am »

Gracias por responder kermany.
No he modificado ninguna propiedad del MSHFlexgrid1 la agrupacion que vez y el simbolo mas y menos se genera automaticamente debido a la consulta SQL que utilizo con SHAPE, APPEND y RELATE

Aqui se explica sobre eso pero con treeview's lo unico que he hecho es pasar el recordset a un Hierarchical Flexgrid que para es dicho control aunque no he encontrado mucha info sobre estohttp://personal.lobocom.es/claudio/ado001.htm

No funciono aplicando .MergeCells = flexMergeFree y repito no he moidficado ninguna propiedad del MSHFlexgrid1 simplemente agrego el control al form y listo.

Espero alguien del foro pueda ayudarme! lo que devuelve al ejecutar es esto parece que hay que modificar la funcion:


saludos

En línea

BlackZeroX
Wiki

Desconectado Desconectado

Mensajes: 3.158


I'Love...!¡.


Ver Perfil WWW
Re: Como exportar MSHFlexgrid1 a Excel? - Expertos en vb6.0
« Respuesta #3 en: 19 Junio 2010, 04:15 am »


Podrias poner un archivo ".mdb" aquí, nunca he tenido que procesar un MSHFlexgrid1 con celdas combinadas ( es para ayudarte!¡. )

P.D.: No tengo Access ni nada de Offices por aqui xP.

Dulce Infierno Lunar!¡.
En línea

The Dark Shadow is my passion.
hunter18

Desconectado Desconectado

Mensajes: 202


Ver Perfil
Re: Como exportar MSHFlexgrid1 a Excel? - Expertos en vb6.0
« Respuesta #4 en: 19 Junio 2010, 04:46 am »

Dejo el archivo .mdb y el proyecto en rapidshare y megaupload para que lo descargues y no haya problema si alguno no funciona.

http://www.megaupload.com/?d=BTOQ0K3G
http://rapidshare.com/files/400561951/Exportar_flexgrid.zip.html

saludos y gracias por responder
En línea

BlackZeroX
Wiki

Desconectado Desconectado

Mensajes: 3.158


I'Love...!¡.


Ver Perfil WWW
Re: Como exportar MSHFlexgrid1 a Excel? - Expertos en vb6.0
« Respuesta #5 en: 19 Junio 2010, 11:43 am »

Bueno la cosa es que en el FlexGrid cols da solo la cantidad de 2 es decir de tu tabla de Categorias pero no toma encuenta las demas con un simple proceso se soluciona!¡.

Código
  1.  
  2.  
  3. Option Explicit
  4.  
  5. Private WithEvents TmpAdoConector              As Cls_AdoConector      '   //  Modulo de clase para trabajar de forma limpia sobre el codigo xP.
  6.  
  7. ' -------------------------------------------------------------------------------------------
  8. ' \\ -- Función para contar las Columnas REALES de un MSHFlexgrid.
  9. ' -------------------------------------------------------------------------------------------
  10. Private Function GetColumns&(ByRef FlexGrid As MSHFlexgrid)
  11. On Error GoTo Terminar
  12. Dim Res$
  13.    Res$ = Space(1)
  14.    Do
  15.        Res$ = FlexGrid.TextMatrix(0, GetColumns&)
  16.        GetColumns& = GetColumns& + 1
  17.    Loop Until Not Err.Number <= 0
  18. Terminar:
  19.    GetColumns& = GetColumns& - 1
  20.    Err.Clear
  21. End Function
  22. ' -------------------------------------------------------------------------------------------
  23. ' \\ -- Función para crear un nuevo libro con el contenido del MSHFlexgrid
  24. ' -------------------------------------------------------------------------------------------
  25. Public Function Flexgrid_To_File_FormatExcel(ByVal sOutPutPath As String, ByRef FlexGrid As MSHFlexgrid) As Boolean
  26. On Error GoTo Error_Handler
  27. Dim Obj_Excel       As Object
  28. Dim Obj_Libro       As Object
  29. Dim Obj_Hoja        As Object
  30. Dim Fila&
  31. Dim TmpStr$
  32. Dim Columna&
  33. Dim CantCols&
  34.  
  35.    ' -- Crea el objeto Excel, el objeto workBook y el objeto sheet
  36.    Set Obj_Excel = CreateObject("Excel.Application")
  37.    If Not Obj_Excel Is Nothing Then
  38.        Set Obj_Libro = Obj_Excel.Workbooks.Add
  39.        If Not Obj_Libro Is Nothing Then
  40.            Set Obj_Hoja = Obj_Libro.Worksheets.Add
  41.            If Not Obj_Hoja Is Nothing Then
  42.  
  43.                ' -- Bucle para Exportar los datos
  44.                CantCols = GetColumns&(FlexGrid)
  45.                With FlexGrid
  46.                    For Fila = 1 To .Rows - 1
  47.                        For Columna = 0 To CantCols&
  48.                            TmpStr$ = .TextMatrix(Fila, Columna)
  49.                            If IsNumeric(TmpStr$) Then TmpStr$ = "'" & TmpStr$
  50.                            Obj_Hoja.Cells(Fila, Columna + 1).Value = TmpStr$
  51.                        Next
  52.                    Next
  53.                End With
  54.  
  55.                Obj_Libro.Close True, sOutPutPath
  56.                Call Obj_Excel.Quit
  57.  
  58.                Set Obj_Hoja = Nothing
  59.                Set Obj_Libro = Nothing
  60.                Set Obj_Excel = Nothing
  61.  
  62.                Flexgrid_To_File_FormatExcel = True
  63.  
  64.            End If
  65.        End If
  66.    End If
  67.    Exit Function
  68. Error_Handler:
  69.    Flexgrid_To_File_FormatExcel = False
  70.    Call Err.Clear
  71. End Function
  72.  
  73.  
  74.  
  75. Private Sub Cmd_Export_Click()
  76.    Call MsgBox(IIf(Flexgrid_To_File_FormatExcel("C:\Excel.xls", MS_DataGrid), "Exportacion Exitosa", "Exportacion Fallida"))
  77. End Sub
  78.  
  79. Private Sub Cmd_LoadData_Click()
  80. 'Dim TmpAdoConector              As Cls_AdoConector      '   //  Modulo de clase para trabajar de forma limpia sobre el codigo xP.
  81. Dim TmpRecordSet                As ADODB.Recordset
  82.  
  83.    Set TmpAdoConector = New Cls_AdoConector
  84.    With TmpAdoConector
  85.        .ConectionType = Other
  86.        .ConnectionString = "Provider               =   MSDataShape.1;" & _
  87.                            "Extended Properties    =   Jet OLEDB:Database Password=;" & _
  88.                            "Persist Security Info  =   False;" & _
  89.                            "Data Source            =   c:\bd_01.mdb;" & _
  90.                            "Data Provider          =   MICROSOFT.JET.OLEDB.4.0"
  91.        Set TmpRecordSet = .GetNew_RecordSet( _
  92.                                            "SHAPE {SELECT codcat,nomcat FROM categoria} AS CABECERA " & _
  93.                                            "APPEND ({SELECT codprod,nomprod,codcat FROM producto} AS DETALLE " & _
  94.                                            "RELATE codcat TO codcat) AS DETALLE" _
  95.                                            )
  96.        If Not TmpRecordSet Is Nothing Then
  97.            Set MS_DataGrid.DataSource = TmpRecordSet
  98.            With TmpRecordSet
  99.                Call .Close
  100.                Call .ActiveConnection.Close
  101.            End With
  102.            Set TmpRecordSet = Nothing
  103.        End If
  104.    End With
  105.    Set TmpAdoConector = Nothing
  106. End Sub
  107.  
  108. Private Sub TmpAdoConector_ErrorEvent(InfoError As ErrObject)
  109.    With Err
  110.        Debug.Print ""
  111.        Debug.Print String$(30, "-")
  112.        Debug.Print "Source:"; .Source
  113.        Debug.Print "Number:"; .Number
  114.        Debug.Print "Description:"; .Description
  115.        Debug.Print String$(30, "-")
  116.        Debug.Print ""
  117.    End With
  118. End Sub
  119.  
  120.  

Dulce Infierno Lunar!¡.
En línea

The Dark Shadow is my passion.
BlackZeroX
Wiki

Desconectado Desconectado

Mensajes: 3.158


I'Love...!¡.


Ver Perfil WWW
Re: Como exportar MSHFlexgrid1 a Excel? - Expertos en vb6.0
« Respuesta #6 en: 19 Junio 2010, 11:52 am »

Se me olvido Usa GESHI!¡.



Dulce Infierno Lunar!¡.
En línea

The Dark Shadow is my passion.
karmany
Colaborador
***
Desconectado Desconectado

Mensajes: 1.615


Sueñas que sueñas


Ver Perfil WWW
Re: Como exportar MSHFlexgrid1 a Excel? - Expertos en vb6.0
« Respuesta #7 en: 19 Junio 2010, 17:35 pm »

Efectivamente como dice BlackZeroX el problema es el número de columnas. Tú haces lo siguiente:
Código
  1. With FlexGrid
  2.        For Fila = 1 To .Rows - 1
  3.            For Columna = 0 To .Cols - 1
  4.                o_Hoja.Cells(Fila, Columna + 1).Value = .TextMatrix(Fila, Columna)
  5.            Next
  6.        Next
  7. End With

y el valor de .Cols no es correcto.

El problema viene porque tienes dos tablas relacionadas:


Decir que el código de BlackZeroX me parece muy bueno y se puede utilizar de forma general. Lo que dará error será Cls_AdoConector, parece ser un módulo de clase que desconozco.

Sabiendo que sólo vas a tener 5 columnas puedes hacer:
   
Código
  1. With FlexGrid
  2.        For Fila = 1 To .Rows - 1
  3.            For Columna = 1 To 5
  4.                o_Hoja.Cells(Fila, Columna).Value = .TextMatrix(Fila, Columna)
  5.            Next
  6.        Next
  7.    End With



En línea

hunter18

Desconectado Desconectado

Mensajes: 202


Ver Perfil
Re: Como exportar MSHFlexgrid1 a Excel? - Expertos en vb6.0
« Respuesta #8 en: 19 Junio 2010, 18:33 pm »

BlackZeroX excelente tus funciones, el codigo que tenia solo cogia las 2 primeras columnas lo cual solucionaste con tu funcion GetColumns, se agradece el tiempo empleado.

karmany, gracias por la aclaracion sobre donde estaba el error de logica y para utilizar el codigo de BlackZeroX basta con hacerlo con sus 2 funciones, la clase Cls_AdoConector es un modulo asumo que creado por BlackZeroX para facilitarse la tarea de conexion.

Finalmente podrian comentar como trabaja la funcion  GetColumns y tambien por que solo tomaba las dos primeras columnas las cuales estaban agrupadas si supuestamente MSHFlexGrid1.Cols recupera el numero de columnas de los encabezados?, de todas maneras voy a revisar el codigo.

saludos
En línea

BlackZeroX
Wiki

Desconectado Desconectado

Mensajes: 3.158


I'Love...!¡.


Ver Perfil WWW
Re: Como exportar MSHFlexgrid1 a Excel? - Expertos en vb6.0
« Respuesta #9 en: 19 Junio 2010, 23:00 pm »

Finalmente podrian comentar como trabaja la funcion  GetColumns y tambien por que solo tomaba las dos primeras columnas las cuales estaban agrupadas si supuestamente MSHFlexGrid1.Cols recupera el numero de columnas de los encabezados?, de todas maneras voy a revisar el codigo.

Lo que pasa es que .Cols te va a devolver lo de tu primer FlexGrid aqui hay dos bueno se puede decir que son dos!¡ FlexGrid solo que anidados segun tu sentencia SQL (creo que es PL/SQL peo no estoy seguro...)

Bien bien si ven en el FlexGrid tiene los signos de -/+ para contraer los datos bueno cuando se contraen se muestran las Verdades Columnas del FlexGrid es decir de tu tabla categorias y los que fueron contraidos son los de tu tabla de Productos o algo asi se llamaban xP jeje. Bien la cosa es que solo va a contar las columnas de tu primera sentencia es decir de tu Tabla Columnas tal cual se lo as indicado en tu sentencia SQL

P.D.: NO TIENE NADA QUE VER la relacion de tablas dentro de Access o de una Base de datos, ya que una sentencia SQL puede ignorar (en este caso lo hace) las relaciones.

Nota:
 -> * Es mejor hacer un modulo de Clase para contener el objecto de Excel, ya que si la funcion se ve interrumpida o terminada la aplicacion por X motivo el Release Memory no se ejecutara (Ando haciendo un modulo de Clase pequeño y ergonomico cuando lo acabe lo publico en un nuevo Tema)!¡.

Dulce Infierno Lunar!¡.
En línea

The Dark Shadow is my passion.
Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
como exportar una bd
PHP
RedZer 4 2,808 Último mensaje 14 Julio 2011, 22:39 pm
por RedZer
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines