Exportar a texto pero con estructura de datos concreta

Tengo una consulta que me devuelve código y cantidad de unos materiales.

Quiero exportar esta consulta a un fichero de texto pero este debe tener una estructura determinada para que puedo importarlo otro programa que gobierna una máquina.

¿Se puede hacer?

¿Por dónde debo empezar a mirar?

Como ejemplo os pego lo que necesito:

nombrelista |P| descripción_lista. ||
nombrelista || codigo_art ||||cantidad| ||||
nombrelista || codigo_art |||| cantidad| ||||

Es algo así, cada campo debe tener un ancho determinado.

1 respuesta

Respuesta
1

Para hacerlo tendrás que crear una Especificación de importación/exportación.

Creas la consulta y con botón derecho seleccionas Exportar ---> Tipo de archivo: Texto

Se abrirá el asistente de exportación de texto, aquí puedes elegir si es delimitado y que tipo de delimitador, o ancho fijo, en avanzado puedes elegir el ancho de las columnas así como guardar la expecificación para utilizarla cuando quieras.

Supongamos que necesite hacerlo todos los días.

Puedo hacer alguna plantilla o similar?

Lo que quiero es que, a partir de una consulta, genere el fichero de texto con el formato determinado y a ser con los menos clicks posibles.

salu2

Lo tendrás que hacer con el método: DoCmd. TranferText

Te explico como funciona:

DoCmd. TransferText acExportFixed, "NombreDeLaExpecificacion", "Nombre de la tabla o consulta a exportar", "Directorio a dónde quieras exportar\Nombre del Archivo.txt"

Como la expecificación la has diseñado como ancho fijo, tendrás que utilizar el modo:

AcExportFixed

Supongamos que la consulta la hemos llamado ConsultaExportacion y a la especificación Exportar, la carpeta dónde queremos mandar el archivo: c:\ángeles y al archivo lo llamamos Archivo.txt

Sería:

DoCmd.TransferText acExportFixed, "Exportar", "ConsultaExportacion", "C:\ángeles\Archivo.txt"

Este método lo puedes ejecutar de varias formas:

1º.- Creando una función en un módulo:

Vas a la pestaña módulos y creas uno nuevo, pondríamos:

Function exportar()
DoCmd.TransferText acExportFixed, "Exportar", "ConsultaExportacion", "C:\ángeles\Archivo.txt"
End Function

Lo podremos ejecutar desde aquí o llamarlo desde una macro:

Vas a la pestaña macros y creas una nueva, en la acción ponemos: EjecutarCódigo y en Nombre de función: Exportar() que como la hemos llamado en el módulo. Cada vez que ejecutes esta macro, lógicamente se ejecutará el código.

2º.- Lo puedes hacer también en un formulario, creas un botón en ese formulario y en la acción al hacer clic picas en la flecha de la derecha y eliges procedimiento de evento, después picas en el cuadro de los ... para abrir el generador de código y ahí escribirías el método:

DoCmd.TransferText acExportFixed, "Exportar", "ConsultaExportacion", "C:\ángeles\Archivo.txt"

Esto tiene una pinta estupenda. Voy a probarlo.

Puedo dentro de ese código hacer que al principio del fichero de texto me ponga un encabezado, un titulo...

gracias!!

Lo de poner un título, creo que no se puede, ya que lo que hace es exportar unos datos que están en una tabla o que devuelve una consulta.

Lo que si puedes hacer es "personalizar" el nombre del fichero al que lo mandas.

Como te he dicho anteriormente lo manda a un fichero que hemos llamado Archivo.txt, cuando vuelves a exportar este fichero lo machaca por el nuevo.

Puedes hacer que ponga la fecha en cada fichero que generes, así si es diario tendrás todos los generados sin que se machaquen:

Sería:

DoCmd.TransferText acExportFixed, "Exportar", "ConsultaExportacion", "C:\ángeles\" + "Archivo" + Str(Day(Date)) + "_" + Str(Month(Date)) + "_" + Str(Year(Date)) + ".txt"

Al final lo he dejado así:

DoCmd.TransferText acExportDelim, "ESPEF2", "TEST", "C:\Users\tri\Desktop\LISTAEXPORT.txt"


Necesitaba un encabezado pero tampoco me cuesta mucho copiar y pegar en el archivo de texto resultante.

Una última cuestión:

El fichero de texto resultante es .TXT y necesito que sea .IMP

Hay alguna forma de renombrarlo o de exportarlo con esa extensión?

Gracias de nuevo

No quiero abusar pero es que tengo otra preguntita...

Esto es lo que me devuelve el fichero de texto exportado:

||B010124 ||||1|||||
||B010136 ||||3|||||
||B030058 ||||300|||||

y así, un montón de líneas.

De mi consulta lo único que extraigo es el código del artículo y la cantidad, el resto son separadores de campos que no me hacen falta pero que tengo que poner para que la otra máquina importe el fichero de texto.

Para ello, he creado la especificación, la macro etc.. pero he relacionado mi consulta con una tabla que he creado en la que he metido los campos necesarios para la importación del archivo.

Estos campos están vacíos, tan sólo los he creado para que ocupen su sitio y su posición en el archivo de texto exportado.

El caso es que el primer campo es NOMBRE DE LISTA que es obligatorio de manera que debería quedar algo así:

NOMBREDELISTA||B010124 ||||1|||||
NOMBREDELISTA||B010136 ||||3|||||
NOMBREDELISTA||B030058 ||||300|||||

El resultado de la consulta no es siempre igual, hoy pueden ser 29 registros pero mañana 150.

Cómo puedo hacer que en el resultado de la consulta el campo Nombre de LISTA me lo rellene con un texto? podía ser todos los días el mismo. En el ejemplo de arriba lo que hago es ir registro por registro escribiendo NOMBREDELISTA al inicio de cada fila. Es para evitarme este trabajo.

Muchas gracias

En la consulta te creas un campo "virtual", un campo virtual es aque que no existe en la tabla, pero si en la consulta y funciona exactamente igual que si estuviese en la tabla.

Para crear un campo virtual, en una de las columnas de la consulta escribes el nombre del campo seguido de :y la expresión que quieras que sea el resultado.

En tú caso pondrías:

ElNombreQueQuieras:"NOMBREDELISTA"

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas