Importar hojas Excel con nombres diferentes |
Responder |
Autor | |
Peter
Asiduo Unido: 27/Octubre/2005 Localización: Alemania Estado: Sin conexión Puntos: 280 |
Tema: Importar hojas Excel con nombres diferentes Enviado: 18/Febrero/2020 a las 17:26 |
Tengo un archivo Excel que aunque se actualiza cada mes, siempre se llama igual y se encuentra en la misma ruta.
Este archivo contiene una única hoja, que siempre se llama de manera diferente, porque se genera con la fecha de download. Ejemplo: Archivo: Nombre_archivo.xlsx hoja: download_20200218 El siguiente mes, el archivo se llamará igual, pero la hoja tendrá un nombre diferente: Archivo: Nombre_archivo.xlsx hoja: download_20200318 y así sucesivamente. Deseo importar cada mes este mismo archivo creando en Access siempre una tabla nueva que se llame igual que la hoja Excel. Por ejemplo, las tablas Access deberían llamarse: download_20200218 y download_20200318 ¿Cómo puede hacerse esto? Agradezco de antemano la ayuda |
|
Peter
|
|
xavi
Ver perfil usuario
Enviar mensaje privado
Ver los mensajes del usuario
Visite la página de los usuarios
Añadir a la lista de amigos
Administrador Terrassa-BCN Unido: 10/Mayo/2005 Localización: Catalunya |||| Estado: Sin conexión Puntos: 14738 |
Enviado: 18/Febrero/2020 a las 18:48 |
Mira la ayuda para DoCmd.TransferSpreadsheet
Creo que es lo que estás buscando. Un saludo
|
|
Peter
Asiduo Unido: 27/Octubre/2005 Localización: Alemania Estado: Sin conexión Puntos: 280 |
Enviado: 19/Febrero/2020 a las 10:05 |
Hola Xavi.
Gracias por tu respuesta. Efectivamente, con ese método es posible importar el archivo. Mi problema: lograr que la tabla a generarse sea nombrada dinámicamente. El archivo de origen se llamará siempre igual y estará siempre ubicado siempre en el mismo lugar, pero la tabla Access importada debe llamarse tal como la hoja Excel (Excel sheet/Worksheet) se llame en el momento de la importación. Eso no lo consigo ¿Cómo modificar el siguiente código (que funciona, pero que nombra a la tabla tal como se llama el archivo y no la hoja -siempre hay en el archivo Excel una hoja única-) para lograr lo que deseo? Dim PATH As String PATH = "C:\Archivo.xlsx" DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel12, PATH, True Exit Sub
Editado por Peter - 19/Febrero/2020 a las 10:12 |
|
Peter
|
|
Maverick2019
Habitual Unido: 10/Junio/2019 Localización: Madrid Estado: Sin conexión Puntos: 145 |
Enviado: 19/Febrero/2020 a las 10:29 |
Hola
Tendrás que crearte una variable de tipo string que contenga el nombre del archivo, y concatenarla a la ruta antes de procesarla. El asunto es ¿el usuario va a seleccionar ese archivo a mano, o será de forma automática? y de ser de esta segunda forma ¿que criterios se seguiran para hacerlo? Salu2,
|
|
Peter
Asiduo Unido: 27/Octubre/2005 Localización: Alemania Estado: Sin conexión Puntos: 280 |
Enviado: 19/Febrero/2020 a las 11:21 |
Hola
Maverick.
Gracias por tu intervención. El nombre del archivo a importar es fijo (Archivo.xlsx), el nombre de la hoja Excel a importar es variable y se genera automáticamente, es decir: ya está disponible a la hora de querer realizar la importación y nunca se repite. No le veo sentido a crear en Access un nombre que ya está disponible como nombre de la hoja Excel a importar (para mayor explicación mira, por favor, el texto de mi pregunta). ¿O he entendido mal tu idea? Lo que deseo, es que al importar se utilice el nombre de la hoja Excel para nombrar así a la tabla Access importada. El archivo se selecciona automáticamente. Seleccionarlo a mano sería poco práctico ya que está siempre en la misma ruta y se llama siempre igual. Los criterios los puedes ver el código escrito en mi intervención anterior. |
|
Peter
|
|
prga
Moderador Unido: 16/Noviembre/2004 Localización: España Estado: Sin conexión Puntos: 3523 |
Enviado: 19/Febrero/2020 a las 13:13 |
Hola.
Si he entendido bien, el siguiente código saca el nombre de la hoja (downloadXXXXXX) de un libro excel llamado archivo.xlsx. Public Sub nombrehoja() Dim mico As Object Dim strcon As String Dim mishojas As Object Dim mfichero As String Dim nomhoja As String mfichero = CurrentProject.Path & "\archivo.xlsx" DoEvents Set mishojas = CreateObject("adodb.recordset") Set mico = CreateObject("adodb.connection") strcon = "Provider=Microsoft.ACE.OLEDB.12.0;User ID=Admin;Data Source=" & mfichero & ";" strcon = strcon & "Extended Properties='Excel 12.0;HDR=NO;IMEX=1';" mico.ConnectionString = strcon mico.Open Set mishojas = mico.OpenSchema(20) 'adSchemaTables mishojas.MoveFirst Do Until mishojas.EOF If InStr(mishojas.Fields("TABLE_NAME"), "download") <> 0 Then nomhoja = mishojas.Fields("TABLE_NAME") Exit Do End If mishojas.MoveNext Loop MsgBox (Replace(nomhoja, "$", "")) mishojas.Close mico.Close Set mico = Nothing Set mishojas = Nothing End Sub El código está puesto a título de ejemplo y tiene falta de depurar, optimizar etc etc. En un principio el código serviría incluso sin tener el excel instalado. Seguro que hay formas más sencillas de obtener ese nombre, pero.... Espero que sea lo que se pide. Ya comentas. Un saludo a todos |
|
fcoval
Asiduo Unido: 19/Enero/2013 Estado: Sin conexión Puntos: 225 |
Enviado: 20/Febrero/2020 a las 09:33 |
Te pongo otra forma para poder sacar el nombre de la hoja del fichero Excel:
Editado por fcoval - 20/Febrero/2020 a las 09:34 |
|
ximo
Ver perfil usuario
Enviar mensaje privado
Ver los mensajes del usuario
Visite la página de los usuarios
Añadir a la lista de amigos
Colaborador Unido: 03/Marzo/2006 Localización: España Estado: Sin conexión Puntos: 2085 |
Enviado: 20/Febrero/2020 a las 18:57 |
Hola, Quizás diga una tonteria, pero si conoces de antemano el nombre de la hoja y que cada mes se incrementa por lo que veo con el numero de mes, consulta la fecha mayor guardada y procede. el año es =year()?... Saludos, ximo |
|
La incansable busqueda de información abre nuestras mentes
Saludos desde Burriana |
|
AnSanVal
Ver perfil usuario
Enviar mensaje privado
Ver los mensajes del usuario
Visite la página de los usuarios
Añadir a la lista de amigos
Administrador Unido: 16/Marzo/2005 Localización: España Estado: Sin conexión Puntos: 5976 |
Enviado: 20/Febrero/2020 a las 23:02 |
Teniendo en cuenta que « Este archivo contiene una única hoja... », el nombre es tan sencillo como: nombre = worksheets(1).name
|
|
Saludos desde Tenerife.
|
|
Peter
Asiduo Unido: 27/Octubre/2005 Localización: Alemania Estado: Sin conexión Puntos: 280 |
Enviado: 20/Junio/2020 a las 16:17 |
Estimados amigos. Por motivos de la pandemia no estoy yendo a la oficina donde tengo los datos correspondientes. No podré contestar sino hasta julio de 2020. Agradezco vuestra ayuda y comprensión. Cordiales saludos.
|
|
Peter
|
|
Responder | |
Tweet
|
Ir al foro | Permisos de foro Usted No puede publicar nuevos temas en este foro Usted No puede responder a temas en este foro Usted No puede borrar sus mensajes en este foro Usted No puede editar sus mensajes en este foro Usted No puede crear encuestas en este foro Usted No puede votar en encuestas en este foro |