Exportar de Excel a un archivo de texto

Respuesta de
a
Usuario
Fernado,
Se puede exportar de Excel a un archivo de texto con campos (en este caso serian las columnas de excel) de longitud fija es decir si tengo las celdas A1, A2 y A3 con datos, puedo decirle que la columna A1 la exporte con una longitud fija de 10 posiciones, la celda A2 con 15 posiciones, y la A3 con 5 posiciones. Teniendo en cuenta que la celda A3 va a tener un formato numérico, es decir justificada con ceros a la izquierda.
Es decir que la salida sea más o menos así:
123456789012345678901234567890
01 Cliente 1 00001
02 Cliente 2 00002
Gracias
Avatar
Experto

Hola, Erik!

Supongo que sabrás que el método de exportación a un archivo de texto desde MS Excel se efectúa con la opción "Grabar como..." y seleccionando en la parte inferior de la ventana de diálogo "Archivo de texto".
También sabrás que este archivo se genera con la hoja activa exclusivamente. Esto nos ayudará a resolver tu problema.

En otra hoja distinta a la que quieres exportar (por ejemplo llámala "aEnviar") coloca esta fórmula en la celda A1:

=SI(ESBLANCO(Hoja1!A1);22;REEMPLAZAR(REPETIR(" ";15);1;LARGO(ESPACIOS(Hoja1!A1));ESPACIOS(Hoja1!A1)))

[Considera si sueles usar comas o punto y coma para separar argumentos de las funciones. Yo usé ";"]

Asumiendo que el contenido de la celda A1 será un texto, esta fórmula completará con espacios al final hasta llegar a los 15 caracteres.

De modo similar la siguiente fórmula es válida para dejar un ancho de 10 caracteres (Es la misma fórmula, sólo que reemplace 15 x 10 y ésta lee la celda A2 de la Hoja1):

=SI(ESBLANCO(Hoja1!A2);22;REEMPLAZAR(REPETIR(" ";10);1;LARGO(ESPACIOS(Hoja1!A2));ESPACIOS(Hoja1!A2)))

Con la misma idea pero agregando ceros delante, la siguiente fórmula convierte el contenido de la celda A3:

=SI(ESBLANCO(Hoja1!A3);22;REEMPLAZAR(REPETIR("0";5);5-LARGO(ESPACIOS(Hoja1!A3))+1;LARGO(ESPACIOS(Hoja1!A3));ESPACIOS(Hoja1!A3)))

Si seleccionas estas tres celdas y tomas la cajita negra de la esquina inferior derecha del rango y la arrastras hacia abajo, al soltar el botón del mouse obtendrás la misma serie de fórmulas para las celdas siguientes. Es decir la fórmula de A4 será equivalente a la de A1, la de A5 similar a la de A2 y así hacia abajo.
Asegurate siempre de tener má lineas de fórmulas que las lineas a exportar de la hoja1. Ten cuidado si insertas lineas en aquella hoja, antes de exportar deberías copiar una grupo de filas correctas sobre las restantes para que se corrijan desplazamientos provocados por insertar o deletear lineas en la hoja original


Paréntesis:
Si mencionas que tus celdas son A1, A2 y A3 (sentido vertical) ¿Por qué tu ejemplo muestra una secuencia horizontal (como si fuera A1, B1 y C1).
Si tuviese que ser realmente así (en una fila) ingresa las fórmula como te dije, luego copia la celda A2 sobre B1 y la celda A3 sobre C1 y obtendrás los resultados como pides...
Cierro paréntesis.

Hasta aquí deberías tener resuelta tu consulta...
Pero te dejo una macro que te puede facilitar la tarea.

Notarás que las fórmulas devuelven una cadena de texto en todos los casos, excepto que la celda correspondiente en Hoja1 estuviera en blanco, en ese caso tendrá un número 22 (podría haber sido cualquiera).

Esto será útil para que la siguiente macro haga todo el proceso por ti.

Activa el editor de Visual Basic (presiona Alt+F11), inserta un nuevo módulo ("Insertar", "´Modulo") y pega el siguiente código:

'Macro de Exportación a TXT

'Graba archivo de formato excel a modo de backup
ActiveWorkbook.Save
Sheets("aEnviar").Select
'Depura lista
Calculate
Columns("A:A").Select
Selection.SpecialCells(xlCellTypeFormulas, 21).Select
Selection.Delete Shift:=xlUp
Range("A1").Select
'graba hoja como TXT
Application.DisplayAlerts = False

ActiveWorkbook.SaveAs FileName:="C:\Erik\Exporto.txt", FileFormat:=xlText, CreateBackup:=False
Application.DisplayAlerts = True
End Sub

Fíjate si necesitas cambiar algún dato aquí, por ejemplo el nombre del archivo.

Esta macro eliminará todas las líneas que digan 22. No te asustes antes habrá grabado el archivo a modo de protección por si hubiera algún error.
De esta manera tu archivo de texto se generará sin lineas excedentes. (A menos que esto no te importe)

Luego grabará el archivo de texto en un directorio y nombre que le habrás indicado en dentro del código.

Luego puedes cerrar este archivo pero no es necesario grabarlo.

Espero haber ayudado a que resuelvas tu problema.

Que tengas un buen fin de semana!

Fernando


Avatar
Experto

Hola, Erik!

Tal vez estés muy ocupado pero, ¿te tomarías un minuto en finalizar esta pregunta?

(Si se acumulan demasiadas, otros usuarios no podrán hacerme nuevas consultas)

Un cordial saludo!
Fernando
Usuario
Gracias Fernando como siempre esta excelente!
Saludos,