Excel - Exportar a txt, con delimitador de campo

   
Vista:

Exportar a txt, con delimitador de campo

Publicado por Zaca (11 intervenciones) el 28/09/2008 10:48:33
Buenos días,

Me gustaría saber si alguien me puede ayudar. Me explico:

Tengo una hoja Excel, con 15 columnas de datos, y miles de
registros, algunos en minúsculas y otros en mayúsculas. Es necesario obtener de
ello un archivo de texto con todo en mayúsculas, pero que respete un número
determinado y fijo de caracteres de cada celda, es decir cada una de las 15
columnas debe tener un número determinado y fijo de caracteres (9 la primera,
30 la segunda, etc.). Además es necesario que en el archivo de texto obtenido
los datos de cada celda queden separados por un delimitador de campo vertical (
| ).
Sería algo así:

45687956P|SÁNCHEZ JARAMILLO |RAÚL |GENERAL MOLA, 15 |etc.

El motivo de obtener el archivo de texto con esas características
es que otro programa debe "leer" ese archivo para generar informes.

Muchísimas gracias de antemano. Un saludo, Zaca.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de JuanC

RE:Exportar a txt, con delimitador de campo

Publicado por JuanC (1054 intervenciones) el 28/09/2008 14:41:18
la solución es una macro...

Option Explicit
Option Private Module
Option Base 1

Sub test()
Dim sLine$, i As Byte, sTmp$
Dim iSize(15) As Integer
Dim c As Object, rng As Range

'//Define tamaño de cada campo
iSize(1) = 9
iSize(2) = 30
iSize(3) = 10
iSize(4) = 10
iSize(5) = 10

iSize(6) = 10
iSize(7) = 10
iSize(8) = 10
iSize(9) = 10
iSize(10) = 10

iSize(11) = 10
iSize(12) = 10
iSize(13) = 10
iSize(14) = 10
iSize(15) = 10

'//Rango de datos (sólo la primer columna)
Set rng = [A2:A3]

'//Recorre toda la columna
For Each c In rng
sLine = ""
With c
'//Construye la línea con cada valor de celda
For i = 1 To 15
sTmp = UCase(.Offset(0, i - 1).Value) '//Mayúscula
If Len(sTmp) < iSize(i) Then
sTmp = sTmp & Space(iSize(i) - Len(sTmp)) '//Ajusta ancho de campo
End If
sLine = sLine & sTmp & "|" '//Separador de lista
Next
End With
sLine = Mid(sLine, 1, Len(sLine) - 1) '//Elimina último separador
Call Line2File(sLine) '//Graba línea en archivo
Next

Set rng = Nothing
Set c = Nothing
End Sub

Private Sub Line2File(ByVal sLine As String)
Dim hFile%
hFile = FreeFile
Open "C:Documents and SettingsJuanCEscritorio est.txt" For Append As #hFile
Print #hFile, sLine
Close #hFile
End Sub

Saludos desde Baires, JuanC
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Exportar a txt, con delimitador de campo

Publicado por Zaca (11 intervenciones) el 28/09/2008 18:26:00
Buenas tardes JuanC,

Muchas gracias por tan pronta respuesta.
Me gustaría que supieras que no tengo idea de Visual Basic, pero al intentar grabas esta macro en el editor del VB, me da un mensaje de error, algo así como que Private Module no está permitido en un módulo de objeto (creo), y no me deja usar la macro.

Te agradecería que me explicases los pasos que debo hacer para poder grabar y ejecutar la macro.

Por cierto cuando puse a modo de ejemplo cómo deberían quedar los datos en el archivo de texto, quería decir esto:

45687956P|SÁNCHEZ JARAMILLO |RAÚL |GENERAL MOLA, 15 |etc.

De nuevo, muchas gracias por tu respuesta y atención. Espero que puedas ayudarme.

Un saludo desde Extremadura.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de JuanC

RE:Exportar a txt, con delimitador de campo

Publicado por JuanC (1054 intervenciones) el 28/09/2008 21:16:36
va a ser más fácil que me envíes el archivo o parte de él y te lo 'acomodo'
al código lo publiqué más que nada por si a alguien más le sirve...

Saludos desde Baires, JuanC
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Exportar a txt, con delimitador de campo

Publicado por Zaca (11 intervenciones) el 29/09/2008 09:26:29
Buenos días,

Ya te mandé un correo. Gracias.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar