EXPORTAR ARCHIVOS TXT DE ANCHO FIJO DESDE EXCEL

Siguiendo con el post anterior de exportar .txt delimitado por caracteres, hoy toca hacer referencia a los archivos .txt de ancho fijo.

Cuando hablamos de ancho fijo queremos decir que cada campo ingresado en nuestro .txt tiene un ancho específico, es decir: la longitud del propio elemento más el carácter específico con el que queramos rellenar hasta llegar al ancho deseado.

Como norma general, cuando hablamos de texto, debemos rellenar espacios en blanco por la derecha y cuando hablamos de números, ceros por la izquierda. Pero en cualquier caso, esto lo encontraréis en las especificaciones que suelen acompañar a los .txt

Rellenar ceros por la izquierda ya lo habíamos visto en otra entrada, y podríamos utilizar esta fórmula perfectamente para realizar nuestra macro (también por la derecha cambiando el orden de la fórmula), os recuerdo que la fórmula era esta:

.Cells(i, 2) = WorksheetFunction.Rept("0", 15 - Len(.Cells(i, 1))) & .Cells(i, 1)

si quisiésemos que fuese por la derecha solo hay que cambiar el orden:

.Cells(i, 2) = .Cells(i, 1) & WorksheetFunction.Rept("0", 15 - Len(.Cells(i, 1)))

Pero para el caso de hoy vamos a utilizar dos funciones específicas para cada caso, para añadir caracteres a la izquierda y a la derecha. Siguiendo con el ejemplo del post anterior, nos piden un archivo txt de ancho fijo con las siguientes especificaciones para cada uno de los campos:

El Campo1 (Marca) debe tener una longitud de 20 caracteres a la derecha, y se rellena con espacios en blanco.
El Campo2 (Carburante) debe tener una longitud de 23 caracteres a la derecha, y se rellena con espacios en blanco.
El Campo3 (Comunidad autónoma de residencia) debe tener una longitud de 28 caracteres a la derecha, y se rellena con espacios en blanco.
El Campo4 (Total) debe tener una longitud de 4 caracteres a la izquierda, y se rellena con ceros.

Pues bien, vemos antes de nada la macro y luego las dos funciones que vamos utilizar:

Sub EXPORTAR_TXT_ANCHOFIJO()
Dim i As Double
'Creamos automáticamente un .txt en blanco que llamamos EJEMPLO
'el archivo se creará en la misma unidad que tenemos el Excel.
Archivo_txt = ThisWorkbook.Path & "\" & "EJEMPLO.txt"
'si queremos cambiar su ubicación basta con poner Archivo_txt = "E:\EJEMPLO.txt"
Open Archivo_txt For Output As #1
With Sheets(1)
fin = Application.CountA(Range("A:A"))
For i = 2 To fin
'Asignamos a cada Campo la función que necesitamos aplicar
Campo1 = C_Der(.Cells(i, 1), 20)
Campo2 = C_Der(.Cells(i, 2), 23)
Campo3 = C_Der(.Cells(i, 3), 28)
Campo4 = C_Izq(.Cells(i, 4), 4)
Print #1, Campo1 & Campo2 & Campo3 & Campo4
Next i
Close
End With
End Sub

Como podéis observar solo tendremos que aplicar a cada campo la función que necesitemos y especificar la longitud de la cadena que le queremos pasar.

Las funciones que vamos a utilizar son dos: Rellenar caracteres por la izquierda:

Function C_Izq(ByVal sCadena As String, ByVal nLargo As Integer, Optional sCaracter As Variant) As String
'Creamos cadena para rellenar por la izquierda con el caracter indicado
Dim sValor As String
If IsMissing(sCaracter) Then sCaracter = "0"
sCadena = Trim(sCadena)
If Len(sCadena) > nLargo Then sCadena = Right(sCadena, nLargo)
sValor = String(nLargo - Len(sCadena), sCaracter) & sCadena
C_Izq = sValor
End Function

Y rellenar caracteres por la derecha:

Function C_Der(ByVal sCadena As String, ByVal nLargo As Integer, Optional sCaracter As Variant) As String
'Creamos cadena para rellenar por la derecha con el caracter indicado
Dim sValor As String
If IsMissing(sCaracter) Then sCaracter = Space(1)
sCadena = Trim(sCadena)
If Len(sCadena) > nLargo Then sCadena = Left(sCadena, nLargo)
sValor = sCadena & String(nLargo - Len(sCadena), sCaracter)
C_Der = sValor
End Function

Una vez que hayamos aplicado la macro, se creará en la misma carpeta o ubicación de nuestro archivo Excel un .txt denominado “EJEMPLO” con la siguiente información:

EXPORTAR ARCHIVOS TXT DE ANCHO FIJO

Efectivamente, ya tenemos nuestros datos correctamente escritos en nuestro archivo de texto 🙂

Y con este post finalizamos cuatro capítulos dedicados a los .txt, espero que os sean de utilidad.

Descarga el archivo de ejemplo pulsando en: EXPORTAR ARCHIVOS TXT DE ANCHO FIJO DESDE EXCEL

 

Anuncios

3 pensamientos en “EXPORTAR ARCHIVOS TXT DE ANCHO FIJO DESDE EXCEL

  1. Hola, como puedo hacer para que una tabla con el formato de 3 columnas “nombre” “edad=20” y “peso=70”, se convierta en base de datos “nombre” “edad=20” y en la siguiente linea “nombre” “peso=70”
    Es decir, que repita el nombre x cantidad de veces (una vez por linea) de acuerdo a las columnas que tiene, en este caso 2, pero si tengo mas características o datos en mas columnas, se tiene que reperir el primer nombre las veces que tenga datos en las columnas . Muchas Gracias. Muy buen aporte

    Me gusta

¿Te ha gustado?. Deja un comentario

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s