Exportar datos de una hoja de excel

Buen día...
Es la primera vez que escribo y no se como empezar, mi duda es: necesito exportar datos desde excel a un archivo de texto. La idea es que debe llevar un ancho predeterminado y estar separados por Comillas y comas. Ejemplo: "Clave_Articulo ","Documento","01/07/08"," ","A " y más campos, ya probé con las opciones de guardar con *.csv y más, y no eh conseguido hacerlo. Agradecería mucho su ayuda.. Nota: los campos son de diferente tamaño y deben ser fijos lo que cambia es el contenido ejemplo: Clave = 16 caracteres, Clave= "3407ERT ". Gracias.

1 respuesta

Respuesta
1
Este es un trabajo complicado, pienso que la única manera es mediante macros, pero no sé si tienes conocimiento de este tema para explicarte un poco la idea.
Lo que pienso es que puedes crear un archivo .txt desde una macro e ir recorriendo los datos que van a alimentar el archivo verificando el tamaño del texto, si el texto tiene menor tamaño que el establecido, entonces entra en un loop donde se le incluyen los espacios vacíos al final.
Sería algo como esto:
Sub GuardarTxt()
Dim namefile As String
Dim c As Range
namefile = Range("H1").Value
Open namefile For Output As #1
For Each c In Range("A1:A20")
If Len(c) <> 10 Then
For i = 1 To 10 - Len(c)
espac = espac & Chr(32)
Next i
x = Chr(34) & c & espac & Chr(34)
Else
x = Chr(34) & c & Chr(34)
End If
Print #1, x
espac = ""
Next c
Close #1
End Sub

Claro, a este tendrás que hacerle algunas adecuaciones para que te funcione. En el ejemplo que te envío el nombre del archivo txt se coloca en la celda H1, debe ser la ruta completa del archivo.
Hola de nuevo, tomando encuenta tu código tengo esto...
Sub GuardarTxt()
Dim namefile As String
Dim c As Range
Dim columna As Integer
Dim fila As Integer
namefile = InputBox("Nombre del Archivo y ruta" _
& Chr(10) & "(c:\Nombre_Archivo.txt):", "comas y comillas")
Open namefile For Output As #1
For fila = 1 To Selection.Rows.Count
For columna = 1 To Selection.Columns.Count
Print #1, """" & Selection.Cells(fila, _
columna).Text & """";
' Checamos que no se la ultima columna.
If columna = Selection.Columns.Count Then
' si es cierto, escribimos una linea en blanco.
Print #1,
Else
' si no escribimos comma.
Print #1, ",";
End If
Next columna
Next fila
Close #1
End Sub
Ahora mi duda es hacer que cada columna tenga el mismo tamaño de la celda, ose, si la columna A tiene 16 y la columna B tiene 8 y ademas comparar cada uno de ellos, tal que si si es carácter ponga comillas y commas, y si es numero, solo coloque commas ejemplo:
"AHLPC33TIMO ","08/07/08", 12.36,01,"A "
Espero me puedas ayudar, lo anterior estuvo muy bien..
Para el tamaño del campo puedes utilizar una variable en lugar del número 10 como lo puse en el ejemplo. Por ejemplo, si colocas en la primera fila del archivo el tamaño del campo en un número, podrías aprovechar este para tomarlo en el código, algo como:
Sub GuardarTxt()
Dim namefile As String
Dim c As Range
namefile = Range("H1").Value
Open namefile For Output As #1
For Each c In Range("A1:G20")
If Len(c) <> cells(1, c.column) Then
For i = 1 To cells(1, c.column) - Len(c)
espac = espac & Chr(32)
Next i
.
.
.
.
Respecto a las comillas está un poco más complicado porque a menos que se pueda saber por el tipo de dato o algo por el estilo, no habría forma de verificarlo desde el código y requeriría hacer un código por cada columna.
Revisa esto y si necesitas ayuda me avisas.
Ok ah quedado mi archivo por fin
      For fila = 1 To Selection.Rows.Count
         ' **** datos de la columa 1
             x1 = Selection.Cells(fila, _
                     1).Text
                If Len(x1) <> 16 Then
                    For toc = 1 To 16 - Len(x1)
                           c = c + Chr(32)
                    Next toc
                 End If
.
...
Gracias tavopz, tu aportación fue muy buena, doy por terminado esto y gracias... saludos

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas