Foros del Web » Programación para mayores de 30 ;) » Programación General » Visual Basic clásico »

de Excel a msflexgrid

Estas en el tema de de Excel a msflexgrid en el foro de Visual Basic clásico en Foros del Web. Hola gente, alguien sabe como puedo incorporar datos de un archivo excel a una grilla ( msfkexgrid) ? gracias...
  #1 (permalink)  
Antiguo 18/05/2011, 19:03
Avatar de gasafonso  
Fecha de Ingreso: septiembre-2008
Mensajes: 357
Antigüedad: 15 años, 8 meses
Puntos: 1
de Excel a msflexgrid

Hola gente, alguien sabe como puedo incorporar datos de un archivo excel a una grilla ( msfkexgrid) ?

gracias
  #2 (permalink)  
Antiguo 22/05/2011, 18:05
Avatar de gasafonso  
Fecha de Ingreso: septiembre-2008
Mensajes: 357
Antigüedad: 15 años, 8 meses
Puntos: 1
Respuesta: de Excel a msflexgrid

Nadie me puede dar una mano con esto ?
  #3 (permalink)  
Antiguo 23/05/2011, 10:39
Avatar de lokoman  
Fecha de Ingreso: septiembre-2009
Mensajes: 502
Antigüedad: 14 años, 7 meses
Puntos: 47
Respuesta: de Excel a msflexgrid

Hola!
El proceso seria asi:
1-Conectarte al archivo Excel y hacer un query (Select * from NombreHoja)
2-Carga el recordset que acabas de hacer en el Grid
  #4 (permalink)  
Antiguo 23/05/2011, 17:15
Avatar de gasafonso  
Fecha de Ingreso: septiembre-2008
Mensajes: 357
Antigüedad: 15 años, 8 meses
Puntos: 1
Respuesta: de Excel a msflexgrid

Si lokoman, yo tengo una rutina de :
Código vb:
Ver original
  1. http://www.recursosvisualbasic.com.ar/htm/trucos-codigofuente-visual-basic/128-importar-excel-flexgrid.htm

pero no me sirve, a parte me da una error, me dice " SE REQUIERE UN OBJETO"

y creo que es por que tengo office 2003, necesitaria alguna rutina para este office


gracias
  #5 (permalink)  
Antiguo 24/05/2011, 06:45
Avatar de lokoman  
Fecha de Ingreso: septiembre-2009
Mensajes: 502
Antigüedad: 14 años, 7 meses
Puntos: 47
Respuesta: de Excel a msflexgrid

Acabo de probar el link y funcionó al 100%, esto fue lo que cambié:

• La ruta del ARCHIVO EXCEL
• El nombre de la HOJA EXCEL
• El nombre del COMMAND
• El nombre del FLEX

Verifica si los nombres que tienes en tu FORM coinciden con los de la rutina, si estan diferentes te saldrá ese error "SE REQUIERE UN OBJETO"
  #6 (permalink)  
Antiguo 24/05/2011, 07:36
Avatar de gasafonso  
Fecha de Ingreso: septiembre-2008
Mensajes: 357
Antigüedad: 15 años, 8 meses
Puntos: 1
Respuesta: de Excel a msflexgrid

Vos tenes el 2003 ? , pero seguramente es una actualizacion del 98 o 97

Sino no se que puede ser, en las referencias que tenes marcado ? como se llama el drivers?
  #7 (permalink)  
Antiguo 24/05/2011, 08:46
Avatar de lokoman  
Fecha de Ingreso: septiembre-2009
Mensajes: 502
Antigüedad: 14 años, 7 meses
Puntos: 47
Respuesta: de Excel a msflexgrid

Tengo el Office 2003, no actualizacion.
Simplemente le di COPY y PASTE al codigo del link, renombré los controles que te mencioné. No añadí referencias a nada, solo el componente FLEX.

• Agrega un MICROSOFT FLEXGRID CONTROL --> NOMBRE: MSFlexGrid
• Agrega un COMMAND --> NOMBRE: CMD
• En el evento clic del CMD:
Call Excel_FlexGrid("D:\Me\Down\New\Exe\Test.xls", MSFlexGrid, 20, 5, "Export")


Componentes


Referencias


Form sin datos


Form con datos

CODE:
Código vb:
Ver original
  1. Option Explicit
  2.  
  3. ' \\ -- Autor :         Luciano Lodola -- http://www.recursosvisualbasic.com.ar/
  4.  
  5. ' ---------------------------------------------------------------------------------
  6.  
  7.  
  8. ' -- Variables para acceder a la hoja excel
  9. Private obj_Excel       As Object
  10. Private obj_Workbook    As Object
  11. Private obj_Worksheet   As Object
  12.  
  13. ' ----------------------------------------------------------------------------------
  14. ' \\ -- Inicio
  15. ' ----------------------------------------------------------------------------------
  16. Private Sub Form_Load()
  17.     Me.Caption = " Importar Excel a FlexGrid "
  18.     cmd.Caption = " Importar a Flexgrid "
  19.     ' -- Configurar el Grid
  20.    With MSFlexGrid
  21.         .Cols = 10
  22.         .FixedCols = 0
  23.     End With
  24. End Sub
  25. ' ----------------------------------------------------------------------------------
  26. ' \\ -- Fin
  27. ' ----------------------------------------------------------------------------------
  28. Private Sub Form_Unload(Cancel As Integer)
  29.     Call Descargar
  30. End Sub
  31.  
  32. ' ----------------------------------------------------------------------------------
  33. ' \\ -- Función para leer los datos del Excel y cargarlos en el Flex
  34. ' ----------------------------------------------------------------------------------
  35. Private Sub Excel_FlexGrid(sPath As String, FlexGrid As Object, Filas As Integer, Columnas As Integer, Optional sSheetName As String = vbNullString)
  36.  
  37.     Dim i As Long
  38.     Dim n As Long
  39.    
  40.     On Error GoTo error_sub
  41.     ' -- Comproba si existe l archivo
  42.    If Len(Dir(sPath)) = 0 Then
  43.        MsgBox "No se ha encontrado el archivo: " & sPath, vbCritical
  44.        Exit Sub
  45.     End If
  46.    
  47.     Me.MousePointer = vbHourglass
  48.     ' -- crea rnueva instancia de Excel
  49.    Set obj_Excel = CreateObject("Excel.Application")
  50.     'obj_Excel.Visible = True
  51.    
  52.     ' -- Abrir el libro
  53.    Set obj_Workbook = obj_Excel.Workbooks.Open(sPath)
  54.     ' -- referencia la Hoja, por defecto la hoja activa
  55.    If sSheetName = vbNullString Then
  56.         Set obj_Worksheet = obj_Workbook.ActiveSheet
  57.     Else
  58.         Set obj_Worksheet = obj_Workbook.Sheets(sSheetName)
  59.     End If
  60.    
  61.     ' -- Setear Grid
  62.    With MSFlexGrid
  63.         ' -- Especificar  la cantidad de filas y columnas
  64.        '.Cols = Columnas
  65.        .Rows = Filas
  66.         ' -- Recorrer las filas del FlexGrid para agregar los datos
  67.        For i = 1 To .Rows - 1
  68.             ' -- Establecer la fila activa
  69.            .Row = i
  70.             ' -- Recorrer las columnas del FlexGrid
  71.            For n = 0 To .Cols - 1
  72.                 ' -- Establecer columna activa
  73.                .Col = n
  74.                 ' -- Asignar a la celda del Flex el contenido de la celda del excel
  75.                .Text = obj_Worksheet.Cells(i + 1, n + 1).Value
  76.             Next
  77.         Next
  78.     End With
  79.     ' -- Cerrar libro
  80.    obj_Workbook.Close
  81.     ' -- Cerrar Excel
  82.    obj_Excel.quit
  83.     ' -- Descargar objetos para liberar recursos
  84.    Call Descargar
  85. ' -- Errores
  86. Exit Sub
  87. error_sub:
  88.     MsgBox Err.Description
  89.     Call Descargar
  90.         Me.MousePointer = vbDefault
  91. End Sub
  92. ' ----------------------------------------------------------------------------------
  93. ' \\ -- Función para descargar los objetos
  94. ' ----------------------------------------------------------------------------------
  95. Private Sub Descargar()
  96.     On Local Error Resume Next
  97.     Set obj_Workbook = Nothing
  98.     Set obj_Excel = Nothing
  99.     Set obj_Worksheet = Nothing
  100.     Me.MousePointer = vbDefault
  101. End Sub
  102. ' ----------------------------------------------------------------------------------
  103. ' \\ -- Botón para leer los datos del libro e importarlos al Grid
  104. ' ----------------------------------------------------------------------------------
  105. Private Sub cmd_Click()
  106.     Call Excel_FlexGrid("D:\Me\Down\New\Exe\Test.xls", MSFlexGrid, 20, 5, "Export")
  107. End Sub
  #8 (permalink)  
Antiguo 24/05/2011, 11:41
Avatar de gasafonso  
Fecha de Ingreso: septiembre-2008
Mensajes: 357
Antigüedad: 15 años, 8 meses
Puntos: 1
Respuesta: de Excel a msflexgrid

Hola lokoman, en la carpeta
c:/archivo de programas/microsoft office que carpetas tenes?

Yo tengo la carpeta MEDIA, Office, office11, office12 y templates

Y lo que te falto al principio las API

"PRIVATE DECLARE FUNCTION SetErrorMode lib "Kernel32" ( ByVal vmode as long) as long
"PRIVATE DECLARE SUB InitCommonControls lib "Comctl32" ()

Última edición por gasafonso; 24/05/2011 a las 11:53
  #9 (permalink)  
Antiguo 24/05/2011, 12:11
Avatar de lokoman  
Fecha de Ingreso: septiembre-2009
Mensajes: 502
Antigüedad: 14 años, 7 meses
Puntos: 47
Respuesta: de Excel a msflexgrid

Tengo las mismas carpetas, ademas de otra que dice CLIPART y STATIONERY, que tiene unas imagenes...

No uso APIs, solo el CODE que está arriba, es todo lo que uso... cuando usas:
• "PRIVATE DECLARE ...
Creo que no debes poner comillas al inicio.

Como te decia, si te sale "SE REQUIERE UN OBJETO", es porque debes tener algun control con un nombre diferente... estas usando el CODE tal cual lo puse o tienes algo editado? Postealo para hacer un test...

Otra cosa, verifica en el TASK MANAGER si el proceso EXCEL está corriendo, es posible que esté enganchado y te esté causando error.
  #10 (permalink)  
Antiguo 24/05/2011, 12:25
Avatar de gasafonso  
Fecha de Ingreso: septiembre-2008
Mensajes: 357
Antigüedad: 15 años, 8 meses
Puntos: 1
Respuesta: de Excel a msflexgrid

Cita:
Iniciado por lokoman Ver Mensaje
Tengo las mismas carpetas, ademas de otra que dice CLIPART y STATIONERY, que tiene unas imagenes...

No uso APIs, solo el CODE que está arriba, es todo lo que uso... cuando usas:
• "PRIVATE DECLARE ...
Creo que no debes poner comillas al inicio.

Como te decia, si te sale "SE REQUIERE UN OBJETO", es porque debes tener algun control con un nombre diferente... estas usando el CODE tal cual lo puse o tienes algo editado? Postealo para hacer un test...

Otra cosa, verifica en el TASK MANAGER si el proceso EXCEL está corriendo, es posible que esté enganchado y te esté causando error.
el TASK MANAGER ? que es eso ? como se hace ?
  #11 (permalink)  
Antiguo 24/05/2011, 12:28
Avatar de gasafonso  
Fecha de Ingreso: septiembre-2008
Mensajes: 357
Antigüedad: 15 años, 8 meses
Puntos: 1
Respuesta: de Excel a msflexgrid

Código vb:
Ver original
  1. Option Explicit
  2.  
  3. ' \\ -- Autor :         Luciano Lodola -- http://www.recursosvisualbasic.com.ar/
  4.  
  5. ' ---------------------------------------------------------------------------------
  6.  
  7. ' \\ Declaraciones ( Apis )
  8. ' ------------------------------------------------------------------------------------------
  9. Private Declare Function SetErrorMode Lib "kernel32" (ByVal wMode As Long) As Long
  10. Private Declare Sub InitCommonControls Lib "Comctl32" ()
  11.  
  12.  
  13. ' -- Variables para acceder a la hoja excel
  14. Private obj_Excel       As Object
  15. Private obj_Workbook    As Object
  16. Private obj_Worksheet   As Object
  17.  
  18. Private Sub Form_Initialize()
  19.     Call SetErrorMode(2)
  20.     Call InitCommonControls
  21. End Sub
  22.  
  23. ' ----------------------------------------------------------------------------------
  24. ' \\ -- Inicio
  25. ' ----------------------------------------------------------------------------------
  26. Private Sub Form_Load()
  27.     Me.Caption = " Importar Excel a FlexGrid "
  28.     Command1.Caption = " Importar a Flexgrid "
  29.     ' -- Configurar el Grid
  30.    With MSFlexGrid1
  31.         .Cols = 10
  32.         .FixedCols = 0
  33.         .FormatString = "Fecha|Gastos"
  34.         .ColWidth(0) = 2000
  35.         .ColWidth(1) = 1500
  36.     End With
  37. End Sub
  38. ' ----------------------------------------------------------------------------------
  39. ' \\ -- Fin
  40. ' ----------------------------------------------------------------------------------
  41. Private Sub Form_Unload(Cancel As Integer)
  42.     Call Descargar
  43. End Sub
  44.  
  45. ' ----------------------------------------------------------------------------------
  46. ' \\ -- Función para leer los datos del Excel y cargarlos en el Flex
  47. ' ----------------------------------------------------------------------------------
  48. Private Function Excel_FlexGrid(sPath As String, FlexGrid As Object, Filas As Integer, Columnas As Integer, Optional sSheetName As String = vbNullString) As Boolean
  49.  
  50.     Dim i As Long
  51.     Dim n As Long
  52.    
  53.     On Error GoTo error_sub
  54.     ' -- Comproba si existe l archivo
  55.    If Len(Dir(sPath)) = 0 Then
  56.        MsgBox "No se ha encontrado el archivo: " & sPath, vbCritical
  57.        Exit Function
  58.     End If
  59.    
  60.     FlexGrid.Redraw = False
  61.    
  62.     Me.MousePointer = vbHourglass
  63.     ' -- crea rnueva instancia de Excel
  64.    Set obj_Excel = CreateObject("Excel.Application")
  65.     'obj_Excel.Visible = True
  66.    
  67.     ' -- Abrir el libro
  68.    Set obj_Workbook = obj_Excel.Workbooks.Open(sPath)
  69.     ' -- referencia la Hoja, por defecto la hoja activa
  70.    If sSheetName = vbNullString Then
  71.         Set obj_Worksheet = obj_Workbook.ActiveSheet
  72.     Else
  73.         Set obj_Worksheet = obj_Workbook.Sheets(sSheetName)
  74.     End If
  75.    
  76.     ' -- Setear Grid
  77.    With MSFlexGrid1
  78.         ' -- Especificar  la cantidad de filas y columnas
  79.        '.Cols = Columnas
  80.        .Rows = Filas
  81.         ' -- Recorrer las filas del FlexGrid para agregar los datos
  82.        For i = 1 To .Rows - 1
  83.             ' -- Establecer la fila activa
  84.            .Row = i
  85.             ' -- Recorrer las columnas del FlexGrid
  86.            For n = 0 To .Cols - 1
  87.                 ' -- Establecer columna activa
  88.                .Col = n
  89.                 ' -- Asignar a la celda del Flex el contenido de la celda del excel
  90.                .Text = obj_Worksheet.Cells(i + 1, n + 1).Value
  91.             Next
  92.         Next
  93.     End With
  94.     ' -- Cerrar libro
  95.    obj_Workbook.Close
  96.     ' -- Cerrar Excel
  97.    obj_Excel.quit
  98.     ' -- Descargar objetos para liberar recursos
  99.    Call Descargar
  100.     Excel_FlexGrid = True
  101.     FlexGrid.Redraw = True
  102. ' -- Errores
  103. Exit Function
  104. error_sub:
  105.     MsgBox Err.Description
  106.     Call Descargar
  107.     Me.MousePointer = vbDefault
  108.     FlexGrid.Redraw = True
  109. End Function
  110.  
  111. Private Sub HighLight_Cells(Grid As Object, cdblMinValue As Double, iCurrentCol As Integer)
  112.     Dim iRow As Integer
  113.     With Grid
  114.         .Redraw = False
  115.         For iRow = 1 To Grid.Rows - 1
  116.             ' -- Establecer Columna y fila activa
  117.            .Col = iCurrentCol
  118.             .Row = iRow
  119.            
  120.             ' -- Comparar el valor
  121.            If IsNumeric(.TextMatrix(iRow, iCurrentCol)) Then
  122.                 If CDbl(.TextMatrix(iRow, iCurrentCol)) >= cdblMinValue Then
  123.                     ' -- Remarcar y resaltar de color esta celda
  124.                    .CellForeColor = vbRed
  125.                 End If
  126.             End If
  127.         Next
  128.         .Redraw = True
  129.     End With
  130. End Sub

Esto es como lo tengo, casi original de Recursosvisuales
  #12 (permalink)  
Antiguo 24/05/2011, 12:50
Avatar de lokoman  
Fecha de Ingreso: septiembre-2009
Mensajes: 502
Antigüedad: 14 años, 7 meses
Puntos: 47
Respuesta: de Excel a msflexgrid

El TASK MANAGER de windows, clic derecho en la barra de tareas...
Probé tu CODE, te faltan dos cosas:

• La rutina del DESCARGAR
• El Evento CLIC del COMMAND, sin esto no te funcionará

Código vb:
Ver original
  1. Private Sub Descargar()
  2.     On Local Error Resume Next
  3.     Set obj_Workbook = Nothing
  4.     Set obj_Excel = Nothing
  5.     Set obj_Worksheet = Nothing
  6.     Me.MousePointer = vbDefault
  7. End Sub
  8. ' ----------------------------------------------------------------------------------
  9. ' \\ -- Botón para leer los datos del libro e importarlos al Grid
  10. ' ----------------------------------------------------------------------------------
  11. Private Sub Command1_Click()
  12.     Call Excel_FlexGrid("D:\Me\Down\New\Exe\Test.xls", MSFlexGrid1, 20, 5, "Export")
  13. End Sub

Asegurate de poner la RUTA correcta a tu archivo y el NOMBRE de la hoja en esta linea:

• Call Excel_FlexGrid("D:\Me\Down\New\Exe\Test.xls", MSFlexGrid1, 20, 5, "Export")

Despues todo esta al 100%
  #13 (permalink)  
Antiguo 24/05/2011, 17:20
Avatar de gasafonso  
Fecha de Ingreso: septiembre-2008
Mensajes: 357
Antigüedad: 15 años, 8 meses
Puntos: 1
Respuesta: de Excel a msflexgrid

En el COPY y PASTE me quedo eso pero tengo la linea de descargar y la llamada al cmd
  #14 (permalink)  
Antiguo 25/05/2011, 06:23
Avatar de lokoman  
Fecha de Ingreso: septiembre-2009
Mensajes: 502
Antigüedad: 14 años, 7 meses
Puntos: 47
Respuesta: de Excel a msflexgrid

Pues, se me ocurren dos cosas:

1-Cual es la estructura de tu archivo EXCEL? recuerda que debe tener un formato de tablas, sin lineas vacias entre los registros ni comillas simples ( ' ) , un nombre valido para la hoja de excel, etc. Ej.:

Código HTML:
Ver original
  1. CAMPO1            CAMPO2       CAMPO3
  2.     bla            bla            bla
  3.     bla            bla            bla
  4.     bla            bla            bla

2-Corre tu programa con F8 y verifica cual es la linea que te presenta el error "SE REQUIERE UN OBJETO"

Confio en que ya verificaste los NOMBRES de los controles y que no estes llamando a un control que no existe en otra parte.
  #15 (permalink)  
Antiguo 25/05/2011, 13:18
Avatar de gasafonso  
Fecha de Ingreso: septiembre-2008
Mensajes: 357
Antigüedad: 15 años, 8 meses
Puntos: 1
Respuesta: de Excel a msflexgrid

Si , la estructura es asi y no tiene espacios vacios ni comillas simples

el error me lo da en esta linea

Set obj_Excel = CreateObject("Excel.Application")
y me salta al " Call Descargar"


y el nombre de la hoja es : "Sheet1"
  #16 (permalink)  
Antiguo 25/05/2011, 14:14
Avatar de lokoman  
Fecha de Ingreso: septiembre-2009
Mensajes: 502
Antigüedad: 14 años, 7 meses
Puntos: 47
Respuesta: de Excel a msflexgrid

Cuales son tus referencias? yo solo tengo estas y tu CODE me funciona al 100%:

• Visual Basic for Applications
• Visual Basic runtime objects and procedures
• Visual Basic objects and procedures
• OLE automation
  #17 (permalink)  
Antiguo 25/05/2011, 15:40
Avatar de gasafonso  
Fecha de Ingreso: septiembre-2008
Mensajes: 357
Antigüedad: 15 años, 8 meses
Puntos: 1
Respuesta: de Excel a msflexgrid

Si tengo las mismas que vos

Para mi debe ser algun drivers que quedo colgado de excel
  #18 (permalink)  
Antiguo 06/06/2011, 08:48
Avatar de gasafonso  
Fecha de Ingreso: septiembre-2008
Mensajes: 357
Antigüedad: 15 años, 8 meses
Puntos: 1
Respuesta: de Excel a msflexgrid

Alguien me puede ayudar ocn este tema ?

Es raro ya que en otra maquina que tengo me anda y tiene el mismo office 2003 y version


GRacias

Etiquetas: excel
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 15:39.