Importar datos de una hoja de cálculo

Iniciado por okik, 28 Enero 2015, 14:30 PM

0 Miembros y 1 Visitante están viendo este tema.

okik

Hola,
Antes de nada decir que antes usaba VB6 y he empezado a programar recientemente en VB2010.

Estoy transcribiendo un programa VB6 a VISUAL BASIC .NET 2010. No lo quiero convertir, puesto que quiero empezar desde el principio aprovechando las ventajas de vb2010. El programa creado con vb6, accedía a una hoja de cálculo Excel (*.xls)  de la siguiente manera (simplificada):


Importar referéncias:
'Microsoft DAO 3.51 Object Library"
'Microsoft ActiveX Data Objects 2.0 Library"


Código (vb) [Seleccionar]
Dim SheetName As String
Dim RecSet As ADODB.Recordset


'Abre la hoja de cálculo 01.xls
With CreateObject("ADOX.Catalog")
   .ActiveConnection = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source='" _
                     & "c:\01.xls';" _
                     & "Extended Properties='Excel 8.0;HDR=yes'"
   SheetName = .Tables(0).Name
   Set RecSet = New ADODB.Recordset
   Set RecSet.ActiveConnection = .ActiveConnection
End With
RecSet.Open "[" & SheetName & "]", , adOpenForwardOnly, adLockReadOnly, adCmdTable


'Lee el archivo
RecSet.MoveFirst ' Se coloca al principio
RecSet.MoveNext
Valor = CStr(RecSet.Fields(1)) 'Obtiene un valor fila:1 y columna:1

RecSet.Close


El caso es que llevo varios días buscando en la red y no consigo encontrar una forma clara de hacer lo mismo con vb2010. Porque yo no quiero acceder a todo el contenido, sino a una fila y columna concreta del archivo xls, según necesite.

Otra cosa que se me ha ocurrido es leer todo y meterlo en un DataGridView, para luego acceder a los datos desde el DataGridView.

Con los datos tengo que hacer cálculos matemáticos, por eso tengo que poder acceder a una información concreta de la tabla según necesite.

Espero que alguien me pueda ayudar  :P.

Saludos

FranciskoAsdf

Hola,

Revisa este codigo, hace lo que necesitas, obviamente tienes que adaptarlo para ti, cambiando algunas variables y/o nombres de archivos.
Debo recalcar que el formato de la hoja de Excel debe ser "plano"; cabeceras y datos.

Código (vb) [Seleccionar]

Ooption Explicit
Dim NewDB As Database
Dim NewTable As TableDef
Dim DBName As String
Dim dbnm As String
Dim db As Database
Dim rs As DAO.Recordset, nofld As Integer, norecd As Integer
Dim J As Long


      Set db = OpenDatabase(App.Path & "\DataAndStuff\" & dbnm)
      Set rs = db.OpenRecordset("BDOfertas")
      Do While Len(ExcelApp.ActiveSheet.Cells(i, 1).Value) <> 0
         J = 1
         rs.AddNew
         Do While Len(ExcelApp.ActiveSheet.Cells(i, J).Value) <> 0
            rs.Fields(J - 1).Value = ExcelApp.ActiveSheet.Cells(i, J).Value
            J = J + 1
         Loop
         rs.Update
         i = i + 1
      Loop



dbnm = nombre de tu base de datos.

Debes crear una instancia para poder usar Excel.

PD: Si hubieses usado la herramienta buscar, hubieses encontrado el post de inmediato, de hecho estaba 10 posts mas abajo que el tuyo :P
Asdf debería ser algún tipo de función.

okik


Gracias  por la respuesta FranciskoAsdf  y no quiero ser quisquilloso... pero no es lo que busco.

El código que me has puesto es de Visual Basic 6.0 y como he explicado lo que quiero es hacerlo con Visual Basic 2010.  Que creo que también se le suele llamar VB.Net 2010

la función: OpenDatabase, no lo reconoce  VB2010, ya para empezar.

Y por último,  este código que me das, si no me equivoco es para acceder a una base de de datos *.mdb y no *.xls. Lo digo porque lo he probado en VB6 y me da error  3343, "No se reconoce el formato de base de datos..."

Saludos

FranciskoAsdf

hola, pucha, aunque no te sirva, puedes tomar la idea de ahí.

Lo que hace el código es leer y tomar los datos de un archivo .xls e insertarlos de forma ordenada en una base de datos .mdb. El problema 3343 es porque el formato de tu base de datos es superior al que puede procesar DAO (o ADO? xD) y es que tiene que estar en formado Office 97, desde 2000 para arriba te dará el mismo error. Busqué incansablemente como hacerlo funcionar con bases de datos mas nuevas, pero no hubo caso.

Saludos!
Asdf debería ser algún tipo de función.

HdM

#4
Hola.

Sin querer desviar el asunto principal del tema...

Citartiene que estar en formado Office 97, desde 2000 para arriba te dará el mismo error. Busqué incansablemente como hacerlo funcionar con bases de datos mas nuevas, pero no hubo caso.

Utilizando los componentes de acceso a datos correctos, puedes acceder a cualquier db Access, independientemente del formato, vía DAO.

Motor JET
             *Microsoft DAO 3.6 Object Library
                                                            ->Formato 97-2k-2k3

Motor ACE
             *Microsoft office 14.0 access database engine object library
                                                            ->Formato 97-2k-2k3-2k7-2k10

             *Microsoft office 15.0 access database engine object library ( A partir de W7)
                                                            ->Formato 2k7-2k10-2k13


https://msdn.microsoft.com/es-es/library/office/ff965871%28v=office.14%29.aspx#DataProgrammingWithAccess2010_Where

Saludos.

- Nice to see you again -

okik

#5
Veo que como yo, te has desesperado buscando...  :rolleyes:

Al final lo que voy ha hacer es crear un DataGridView, y cargar los datos en el mismo, ademas de poder modificarlos poder crear otro archivo excel o podificar el original



FranciskoAsdf

Cita de: HdM en 29 Enero 2015, 15:33 PM
Hola.

Sin querer desviar el asunto principal del tema...

Utilizando los componentes de acceso a datos correctos, puedes acceder a cualquier db Access, independientemente del formato, vía DAO.

Motor JET
              *Microsoft DAO 3.6 Object Library
                                                             ->Formato 97-2k-2k3

Motor ACE
              *Microsoft office 14.0 access database engine object library
                                                             ->Formato 97-2k-2k3-2k7-2k10

              *Microsoft office 15.0 access database engine object library ( A partir de W7)
                                                             ->Formato 2k7-2k10-2k13


https://msdn.microsoft.com/es-es/library/office/ff965871%28v=office.14%29.aspx#DataProgrammingWithAccess2010_Where

Saludos.

Si probé cambiando los motores, pero tampoco funcionó. Siempre obtuve el mismo mensaje "No se reconoce formato de la base de datos..."

cuando digo "incansablemente", es porque en realidad si busqué mucho xD

Saludos, gracias por el articulo, lo leeré de igual manera.
Asdf debería ser algún tipo de función.

HdM

Hola.

No dudo de que hayas buscado mucho, pero ya te digo yo que no deberías tener ningún problema. Más que nada, debido a que tuve en su día que hacer la migración en varias ocasiones, sin ninguna complicación.

Los problemas que comentas, te surgirían si utilizas el control "data" (desaconsejado) que sólo te permitirán atacar hasta db 2K3, siempre que tengas el último SP de vb6.

Saludos.

- Nice to see you again -