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

Esportar planilla de excel a VB

Estas en el tema de Esportar planilla de excel a VB en el foro de Visual Basic clásico en Foros del Web. Queridos amigos. estoy haciendo un programa en el cual hay una lista de precios. lo que quiero hacer es que cuando el proveedor envía la ...
  #1 (permalink)  
Antiguo 29/10/2007, 12:55
Avatar de titux_co  
Fecha de Ingreso: octubre-2006
Mensajes: 24
Antigüedad: 17 años, 6 meses
Puntos: 0
Esportar planilla de excel a VB

Queridos amigos.
estoy haciendo un programa en el cual hay una lista de precios. lo que quiero hacer es que cuando el proveedor envía la nueva lsita de precios (siempre la manda en excel) poder importarla y que se actualizen los datos de la BD. trabajo con VB6 y mysql. no consigo una rutina que lo haga bien y tengo poco conocimiento del manejo de excel desde vb. desde ya muchas gracias
  #2 (permalink)  
Antiguo 29/10/2007, 14:22
Avatar de IGNIS  
Fecha de Ingreso: junio-2003
Mensajes: 70
Antigüedad: 20 años, 10 meses
Puntos: 0
Re: Esportar planilla de excel a VB

Trabajé hace tiempo tomando datos desde un archivo de excel especificamente clasificandolo por columnas y luego asignandolas a comlumnas de mi base de datos, y finalmente en ella; trabajo con los datos.
En que parte de todo el proceso tienes problemas? Abrir un archivo de excel, visualizarlo, obtener datos de él?
__________________
La verdad es la llave, no la puerta.
  #3 (permalink)  
Antiguo 31/10/2007, 12:16
Avatar de titux_co  
Fecha de Ingreso: octubre-2006
Mensajes: 24
Antigüedad: 17 años, 6 meses
Puntos: 0
Re: Exportar planilla de excel a VB

Te explico:
el sistema centa con una base de datos en mysql. una de las partes tiene un listado de insumos o productos que la empresa vende. La empresa compra insumos o productos a distintos proveedores estos le madan las listas de precios en planillas de excel.
Mi objetivo es que la persona encargada de actualizar los precios importe esa planilla de excel desde el sistema y los precios queden actualizados automáticamente. No tengo idea de como se leen los datos de excel desde VB para asi poder manejarlos.
Las planillas enviadas por los proveedores identifican los productos con un código creo que es eso lo que debería usar para actualizar la base de datos. pero no se como hacerlo. si sabes como o tenes algún ejemplo agradeceria que me lo compartas.

Desde ya muchas gracias
  #4 (permalink)  
Antiguo 31/10/2007, 13:06
Avatar de IGNIS  
Fecha de Ingreso: junio-2003
Mensajes: 70
Antigüedad: 20 años, 10 meses
Puntos: 0
Re: Esportar planilla de excel a VB

Te muestro un poco de código, espero que te sea de utilidad.

Coloca estas declaraciones al principio de tu formulario (variables globales):

Código:
Dim dbToUse As Database
Dim sPath As String
Dim sSpecifier As String
Dim sChosenRange As String
Abrir un Archivo de Excel:

Bueno para Abrir el Archivo de Excel primero tienes que insertar el control CommondDialog, que te permitirá abrir el cuadro de dialogo, con el filtro indicado (.xls) para poder visualizar unicamente los archivos con esta extensión, esta rutina unicamente te permite seleccionar el archivo, guardar en una variable su ubicación.

Código:
Private Sub Command1_Click()
Set dbToUse = Nothing
On Error Resume Next

With cdlg
    .Filter = "Excel 4 Worksheet (*.xls)|*.xls"
    .flags = cdlOFNFileMustExist Or cdlOFNHideReadOnly
    .CancelError = True
    .ShowOpen
    If Err.Number = cdlCancel Then
        Exit Sub
    End If
    
    Select Case .FilterIndex
        Case 1  'excel 4
            sSpecifier = "Excel 4.0"
        Case 2  'lotus
            sSpecifier = "Lotus WK1"
    End Select
    sPath = .filename
End With

Set dbToUse = Workspaces(0).OpenDatabase(sPath, False, False, sSpecifier)
If Err.Number <> 0 Then
    MsgBox "error: " & Err.Number & vbCr & Err.Description
    Err.Clear
    Set dbToUse = Nothing
    Exit Sub
End If
lblSheetPath.Caption = sPath
End Sub
cdlg es mi control CommondDialog, lblSheetPath es un label en donde muestro la ubicación del archivo seleccionado.

Un archivo de Excel puede tener más de una hoja de datos, y probablemente los proveedores usen mas de una para actualizar los precios, el siguiente método lo uso para obtener las hojas del archivo de excel, y las coloco en un ListBox para que el usuario decida con cual trabajar, puedes mandar a llamar el procedimiento con un boton, o en automático despues de seleccionar el archivo:


Código:
Private Sub FillSheetList()
lstSheetranges.Clear

Dim OutDB As Database
Dim Temptbl As TableDef

Screen.MousePointer = vbHourglass

Set OutDB = Workspaces(0).OpenDatabase(sPath, False, False, sSpecifier)
If Err.Number <> 0 Then
    Set OutDB = Nothing
    Err.Clear
    Screen.MousePointer = vbDefault
    Exit Sub
End If

        For Each Temptbl In OutDB.TableDefs
            If sSpecifier = "Excel 4.0" Then
                If Right$(Temptbl.name, 1) = "$" Then
                    lstSheetranges.AddItem Left$(Temptbl.name, Len(Temptbl.name) - 1)
                End If
            ElseIf sSpecifier = "Lotus WK1" Then
                If Right$(Temptbl.name, 1) = ":" Then
                    lstSheetranges.AddItem Left$(Temptbl.name, Len(Temptbl.name) - 1)
                End If
            End If
        Next
    
Set Temptbl = Nothing
OutDB.Close
Set OutDB = Nothing
Screen.MousePointer = vbDefault
End Sub
lstSheetranges es el ListBox que Utilizo para visualizar las hojas.

Ahora, ya que puedes elegir entre una y otra hoja coloqué un control Data para visualizar cada hoja, cada que el usuario da un clic al nombre de cada una.


Código:
Private Sub lstSheetranges_Click()
Dim xfor As Integer
Dim yfor As Integer
Screen.MousePointer = vbHourglass
On Error Resume Next
    sChosenRange = lstSheetranges.List(lstSheetranges.ListIndex)
    
    'se llena el control data con los datos de la hoja
    dtaSampleData.Connect = sSpecifier & ";"
    dtaSampleData.DatabaseName = sPath
 
            dtaSampleData.RecordSource = sChosenRange & "$"

    faRangeSample.Redraw = False
    dtaSampleData.Refresh
    faRangeSample.Redraw = True
    If Err.Number <> 0 Then
        With faRangeSample
            faRangeSample.Redraw = True
        End With
        dtaSampleData.Database.Close
        Err.Clear
        sChosenRange = ""
    End If
Screen.MousePointer = vbDefault
regcount.Caption = dtaSampleData.Recordset.RecordCount & " registros encontrados"'label
colcount.Caption = faRangeSample.Cols - 1 & " columnas"
'llenar los combos
For xfor = 0 To 13
  cbofuente(xfor).Clear
  For yfor = 0 To faRangeSample.Cols - 1
    cbofuente(xfor).AddItem dtaSampleData.Recordset.Fields(yfor).name
  Next yfor
Next xfor
End Sub
cbofuente es un combo que utilice para poner todas las columnas de la hoja del archivo de excel, como te das cuenta conectas el control data directamente con el archivo de excel para que lo muestre, especificamente con la hoja que seleccionas:

Código:
dtaSampleData.RecordSource = sChosenRange & "$"
No olvides poner la propiedad Conect del control DATA en "Excel 4.0;" en el cuadro propiedades de VB6.

Bueno al rato te pongo la rutina para pasarlos a la base de datos, por ahora tengo que irme.

Un Saludo.
__________________
La verdad es la llave, no la puerta.
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 04:51.