Access - Importar excel con diferentes Nombres de registro

 
Vista:
sin imagen de perfil
Val: 28
Ha mantenido su posición en Access (en relación al último mes)
Gráfica de Access

Importar excel con diferentes Nombres de registro

Publicado por Luis (15 intervenciones) el 30/07/2020 01:37:02
Hola a todos, tengo un archivo que me envian diariamente pero los titulos de las columnas tienen espacios, cuando trato de importarlos en access en una tabla hecha por mi y sin espacios no me permite, es decir el archivo que recibo es algo así :

Sched group, Ship Date, QTY
xdf45654-gs-654, 7/5/2020, 1000

y quiero importarla en algo como esto

Orden, Envio, QTY
xdf45654-gs-654, 7/5/2020, 1000

usando DoCmd.TransferSpreadsheet acImport me marca error
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
1
Responder
Imágen de perfil de Manuel
Val: 395
Bronce
Ha mantenido su posición en Access (en relación al último mes)
Gráfica de Access

Importar excel con diferentes Nombres de registro

Publicado por Manuel (171 intervenciones) el 18/08/2020 12:37:08
Hola, DoCmd.TransferSpreadsheet funciona bien si encuentra las cosas como quiere, sino te dará muchos quebraderos de cabeza. Yo te propongo otra solución aparentemente más complicada, pero también más genérica, algo como:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Dim db As DAO.Database
Dim ro As DAO.Recordset
Dim rd As DAO.Recordset
Dim texel As String
 
Set db = CurrentDb()
 
'la siguiente tienes que personalizarla con tu archivo de excel, nobre de la hoja a importar, etc.
texel = "SELECT s1.* FROM [Excel 12.0;HDR=YES;IMEX=2;DATABASE=PruebaDotro.xls].[Hoja1$] AS s1;"
Set ro = db.OpenRecordset(texel, dbOpenForwardOnly)
Set rd = db.OpenRecordset("SELECT * FROM Tabla1", dbOpenDynaset)
 
 
Do Until ro.EOF
    rd.AddNew
    rd!Orden = ro.Fields(0)
    rd!Envio = ro.Fields(1)
    rd!QTY = ro.Fields(2)
    rd.Update
    rd.Requery
    ro.MoveNext
Loop

Usando DAO importas una hoja de excel, pero usandola como si fuera una tabla, a una tabla propia tuya (en el código de ejemplo puse Tabla1 de nombre, pero sería el que tu quisieras). Uso posición de los campos (Fields(0) por ejemplo es el campo 1 de un recordset -primera columna en Excel) en lugar de nombres para evitar el problema de que no sean con el mismo nombre los de la tabla de excel a importar. En la tabla interna si pongo los nombres.

Aún así, en teoría, como lo ibas a hacer, poniendo en falso que la primera columna fueran nombres de campos y usando rango de valores ("Hoja1!A2:C70" por ejemplo), Docmd.TransferSpreadsheet también te debería funcionar.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil

Importar excel con diferentes Nombres de registro

Publicado por JAVIER (18 intervenciones) el 09/01/2022 19:53:52
Buenas tardes Manuel
Estoy intentando reproducir tu código ya que tengo el mismo problema que se planteaba. Quiero importar unas columnas determinadas de un excel y además con otros nombres de campo
Este es el código mío. Los datos se encuentran en las columnas 1, 11 y 12 de la página "Remesas" del fichero excel "Recibos 2022"
Me da el siguiente error "No se puede encontrar el archivo ISAM instalable"
A ver si me puedes ayudar a localizar donde engo el error
Muchas gracias

Private Sub BtnAceptar_Click()


Dim db As DAO.Database
Dim ro As DAO.Recordset
Dim rd As DAO.Recordset
Dim texel As String

Set db = CurrentDb()


texel = "SELECT * FROM [Excel 15.0;HDR=YES;IMEX=2;DATABASE=D:\AREA DE TRABAJO\Recibos2022.xlsx].[Remesas$];"
Set ro = db.OpenRecordset(texel, dbOpenForwardOnly)
Set rd = db.OpenRecordset("SELECT * FROM Remesa20220109", dbOpenDynaset)


Do Until ro.EOF
rd.AddNew
rd!Referencia = ro.Fields(0)
rd!Cuota = ro.Fields(10)
rd!CuotaAnterior = ro.Fields(11)
rd.Update
rd.Requery
ro.MoveNext
Loop

End Sub[
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar