Home > Foro de Excel >

Debates de Excel > Importar. Txt (+65536filas) con ADO?

Grupo de Excel
Foro de Excel
18134 Debates | 2006 Documentos | 1 Vídeo | 1 Test | 1 Blog | 675 Imágenes | 16604 Miembros

Importar. Txt (+65536filas) con ADO?

Escrito por Arquimedes03 Sccj el 8 de Octubre

Hola,...

Os planteo aquí un problemilla en el que me he quedado un tanto "atascado" (a ver si alguien me puede echar una mano). El tema lo dejé caer en mi aporte a un hilo que ha quedado algo atrás, y que, a su vez, lo había planteado inicialmente Felipe (Fprado). Para poneros en antecedentes, aquí dejo el link de ese hilo:

Hilo:

Http://foros.emagister.com/tema-ayuda_urgent-12890-914810-1. Htm

Código ADO sugerido:

Http://www.mrexcel.com/forum/showthread. Php? T=69718&highlight=import+65536

Al final de mi aporte (espero que no haya resultado demasiado largo) en ese hilo, me planteaba cómo hacer que, con el código que había sugerido Armando, se importara todo un archivo. Txt (que iba a ocupar varias hojas en el Libro), de manera que el resultado en Excel tuviese la misma "presentación" que en el archivo. Txt , puesto que al correr ese código (tal como aparece, y como yo mismo incorporé al adjunto que dejé en ese hilo), algunos de los campos se presentan en la hojas resultantes de la importación, de una forma bastante diferente a cómo lo hacen en el archivo original. En fin, que no sé qué añadir o qué hacer en esa macro para que las hojas resultantes de la importación presenten el resultado de la misma como estaba en el. Txt

Si a alquien se le ocurre algo, le estaría muy agradecido. Saluditos!


Citar  |  
Ver mensaje      

Abraham Valencia
Lima, Perú
Escrito por Abraham Valencia el 9 de Octubre

Hola:

1- Estimados amigos intervinientes en esa conversacion, no lo tomen a makl por favor, peor, para ciertos niveles de programacion usando ADO no basta copiar/pegar codigos y/o enviar enlaces, es muy importante el entender exactamente lo que se esta usando

2- Recordemos tambien que ADO (ActiveX Data Objects) NO ES un lenguaje de programacion, sino que mas bien es un conjunto de objetos COM que permite el acceso a recursos de datos. Dichos objetos son compatibles con varios lenguajes de programacion (VBA, VB, Delphi, etc) y poseen propiedades, metodos, etc

3- Un recordset es el conjunto de registros obtenidos en la conexion, con sus correspondientes campos.

4- Si se usa el metodo "CopyFromRecordset" lo que se hace es literalmente es copiar el todo (o la cantidad de registos indicada como ene ste caso) el recordset en donde se indique.

5- ¿Porque se copia todo en una columna unicamente? EL dilema es que el separador del archivo txt es "puntos y comas" y seguramente en donde usaron ese codigo el separador de listas de la configuracion regional es "comas". Entonces como en la cadena de conexion no indicaron cual era el del archivo, tomo el standard de la configuracion regional y para el codigo existia UN solo campo. ¿En donde se indica eso?

"Extended Properties=""text;HDR=NO;FMT=Delimited(;)""" --> ¿Lo ven? Ven porque tanta importancia en leer y sobre todo entender lo que se copia/pega

Otra cosa, uds colocaron el HDR como YES, pero deberia ir NO como yo lo coloque. ¿Porque? Tarea para la casa Laughing

6- De todos modos al copiar todo el recordset Excel interpretara los datos asu modo (Por decirlo asi) y para mantener los formatos tal cual estan en el txt, se me ocurren dos cosas:

a) Dar formato previo a la hoja, o mejor dicho, a cada columna de la hoja. Ya que sabemos que campo tiene que formato, despues de inseretar la hoja, cojemos cada columna y le damos el formato deseado y recien despues copiamos/pegamos los datos del recorset. Hummm... Para que me entiendan, algo asi:

Sheets. Add
Columns("C:C"). NumberFormat = "00000000000000"
Columns("D:D"). NumberFormat = "0000. 0000"
etc etc

Obviamente yo estoy poniendo formatos al azar, pero se supone que cada uno/a sabra como formatear para obtener lo deseado. Ah, claro que nunca es ideal darle formato a todas las celdas sean de columna o fial, ya que esto aumenta el tamaño del archivo, pero,e s decision personal.

b) Usar funciones multidimensionales (UBOUND) NO usar "CopyFromRecordset", y asi, identificar cada registro/campo he insertarlo en cada fial/columna correspondiente formateando cada registro/campo a traves de Format. Ahi tambien tendrian que saber que formato es el que desean para cada campo. ¿La dificultad en esto? Pues hay que saber usar bien esas funciones, requiere mas codigo y mas conocimeinto.

Bueno, espero haberles ayudado. Saludos

Abraham


Citar  |  
Ver mensaje     

Arquimedes03 Sccj
Madrid, España
Escrito por Arquimedes03 Sccj el 11 de Octubre

Hola Abraham,...

Ante todo, muchas gracias por tu respuesta y, sobre todo, por lo detallada y el tiempo que te has tomado en ello. Ya comenté que este tema me interesa bastante; de hecho, he contestado ahora porque aún he estado haciendo pruebas con las soluciones que se proponían en los enlaces que se daban, habiendo retocado el código, lógicamente. Respecto del enfásis que pones en al singularidad que tiene trabajar con ADO,... Pues sí tienes toda la razón. Al menos yo, estoy muy verde en ese tema, aunque ya me estoy poniendo a ello, puesto que me está haciendo falta para mi trabajo. No obstante, y en lo que a este ejemplo concernía, te diré que a mí me daba cada campo en una columna, puesto que yo sí tengo configurado como separador de listas el ";". Mis problemas venían en lo que al formato se refiere, pero, con tu observación al respecto, ya lo tengo casi resuelto. Igualmente, con respecto a la cadena de conexión, a mí me da exactamente el mismo resultado con las dos cadenas que te menciono aquí debajo:

"Provider=Microsoft.Jet.OLEDB.4. 0;" & _
"Data Source=" & strFilePath & ";" & _
"Extended Properties=""text;HDR=Yes;FMT=Delimited"""

"Provider=Microsoft.Jet.OLEDB.4. 0;" & _
"Data Source=" & strFilePath & ";" & _
"Extended Properties=""text;HDR=No;FMT=Delimited(;)"""

Concretamente (y por esta "tarea" que dejabas), me da lo mismo con el HDR en Yes que en No. No obstante, ya te digo que estoy adentrándome ahora en el manejo de ADO, así que tampo sé lo que significa (me pondré a ello); simplemente quería añadirte esa observación.

Al margen de todo ello, pues al final conseguir obtener el resultado perfecto, aunque mediante otro planteamiento... El que se citaba en el primero de los links propuestos... Empleando matrices, con las funciones Split y UBound, y echando mano de ReDim. Tuve que retocar bastante el código original y me llevó bastante tiempo (los "gajes" del programador :-), pero al final salió todo bien. En fin, visto el detalle que has tenido al intentar ponernos +luz en este hilo, no quería dejar de agradecértelo.

Saluditos!


Citar  |  
Ver mensaje     

Abraham Valencia
Lima, Perú
Escrito por Abraham Valencia el 11 de Octubre

Pues que gusto que hayas obtenido los resultados esperados, a mi me gusta mucho cuando la gente al darles una pista simple, pues, logran ellos(as) mismos(as) sus metas. Te felicito.

Lo del delimitador, como tu mencionas te funcionaba bien porque tu separador de (;), pero, lo ideal cuando programamos es que nuestro codigo sirva para cualquier PC, pero mas que eso, es importante como siempre digo entender lo que hace cada instruccion-

Sobre lo del HDR, te dara el mismo resultado en este caso, pero, te aseguro que con otros archivos no necesariamente sera asi, es por eso mi recomendacion. Pista: Tiene que ver con los encabezados de campo :)

Solo para termiknar, definitivamente toda conexion con ADO sera mas rapida que otras

Abraham


Citar  |  
Ver mensaje     

Arquimedes03 Sccj
Madrid, España
Escrito por Arquimedes03 Sccj el 12 de Octubre

Por si alquien de los que habéis visitado este hilo le pudiera interesar, he añadido en el hilo del que "deriva" éste, y continuando con la conversación con Fprado (el compañero que inició aquel hilo), un adjunto donde muestro las soluciones, con el oportuno retoque de código, a las que he llegado a partir de los links que se sugerían. El link de ese hilo es:

Http://foros.emagister.com/tema-ayuda_urgent-12890-914810-1. Htm

Saluditos!


Citar  |  
Ver mensaje     


Responder


Quiero recibir alertas por email cuando haya mensajes nuevos en este debate

Al escribir en el debate:
  1. Repasa la ortografía y no escribas en formato SMS.
  2. Lee el texto dos veces antes de publicar.
  3. No escribas todo en mayúsculas o negritas.
 
Páginas internacionales: España  |  Italia  |  Francia  |  México  |  Alemania  |  Reino Unido  |  Argentina  |  Chile  |  Colombia  |  USA

Búsquedas frecuentes: como abrir un coche dispan doble foro oftalmologo operacion ligamento cruzado anterior numeros ordinales del 1 al 100

Emagister cumple la Ley Orgánica 15/1999 de 13 de diciembre, de Protección de datos de Carácter Personal, y posee el código de inscripción nº 2002010053 del Registro General de la Agencia de Protección de Datos. Copyright © 1999/2000 - Grupo Intercom - Todos los derechos