[RESUELTO] Exportar a TXT

Discute sobre la aplicación de hojas de cálculo

[RESUELTO] Exportar a TXT

Notapor fgili » Jue Ene 11, 2018 12:41 pm

Código: Seleccionar todo   Expandir vistaContraer vista
Option Explicit

Sub Exportar_A_TXT_v2
   Dim oDoc As Object ' El documento actual
   Dim oHojas As Object ' La colección de hojas del documento
   Dim oHoja As Object ' Hoja en específico
   Dim sNewFilename As String ' Nuevo nombre de texto
   Dim sURL As String ' URL existente en el documento
   Dim sCurrDir As String ' Directorio actual
   Dim sExt As String ' La nueva extensión a aplicar
   Dim NumeroArchivo As Integer
   Dim LongitudColumnas(0) As Integer ' Columnas A-L. Columna A = índice 0 del array
   Dim DatoCelda As String
   Dim FilaActual As Long
   Dim Contador As Long
   Dim UltimaColumna As Long
   Dim LineaResultado As String
   
   Const COLUMNA_A As Long = 0
   
   UltimaColumna = 11   ' Columna_L
   ReDim LongitudColumnas(UltimaColumna)
                     ' COLUMNAS   LONGITUD
   LongitudColumnas(0) = 3      ' Columna_A      3
   LongitudColumnas(1) = 1      ' Columna_B      1
   LongitudColumnas(2) = 5      ' Columna_C      5
   LongitudColumnas(3) = 8      ' Columna_D      8
   LongitudColumnas(4) = 10          ' Columna_E      10
   LongitudColumnas(5) = 10           ' Columna_F      10
   LongitudColumnas(6) = 1      ' Columna_G      1
   LongitudColumnas(7) = 15           ' Columna_H      15
   LongitudColumnas(8) = 10           ' Columna_I      10
   LongitudColumnas(9) = 8      ' Columna_J      8
   LongitudColumnas(10) = 28   ' Columna_K      28
   LongitudColumnas(11) = 2           ' Columna_L      2
                     ' TOTAL         101

   oDoc = ThisComponent
   oHojas = oDoc.Sheets()
   oHoja = oHojas.getByName("DATOS")
   sURL = ConvertFromURL(oDoc.getLocation())
   sCurrDir = Mid(sURL, 1, Len(sURL)-Len(Dir(sURL)))
   sExt = ".txt"
   sNewFilename = sCurrDir & "Archivo_" & Format(Now, "yyyymmddhhmmss") & sExt
   ' ¡Atención! Los datos comienzan en la Fila 3 (El índice de la Fila 1 es 0)
   FilaActual = 2
   ' ¡Atención! Los datos comienzan en la Columna A (El índice de la Columna A es 0)   
   NumeroArchivo = FreeFile
   Open sNewFilename For Output As #NumeroArchivo
   With oHoja
      Do While .getCellByPosition(COLUMNA_A, FilaActual).getString() <> "Fin listado"
         LineaResultado = ""
         For Contador = 0 To UltimaColumna
            DatoCelda = .getCellByPosition(Contador, FilaActual).getString()
            If Len(DatoCelda) < LongitudColumnas(Contador) Then
               DatoCelda = DatoCelda & Space(LongitudColumnas(Contador) - Len(DatoCelda))
            End If
            LineaResultado = LineaResultado & DatoCelda
         Next
         Print #NumeroArchivo, LineaResultado
         FilaActual = FilaActual + 1
      Loop
   End With
   Close NumeroArchivo
End Sub


Hola, he utilizado la macro de este post y funciona ok pero me piden un archivo de texto con las siguientes caracteristicas:
Son 5 lineas y cada linea tene unos campos determinados y algunos en blanco (y hay que respetar las posiciones)
Adjunto imagen para que se entienda mejor el formato
Imagen
Las lineas siguientes tienen otras caracteristicas de espacios diferentes
Es posible hacerlo?
alguien puede decirme como?


Adjunto ejemplo de txt que me enviaron como modelo de como quedaria con los datos ingresados

Muchas gracias!!
Adjuntos
ejemplo.zip
(379 Bytes) 41 veces
Última edición por mauricio el Mar Ene 16, 2018 6:18 am, editado 2 veces en total
Razón: Marcar icono de resuelto
Open Office 4.0 + Win 7
Avatar de Usuario
fgili
 
Mensajes: 39
Registrado: Lun Sep 02, 2013 2:34 pm

Re: Exportar a TXT

Notapor PepeOooSevilla » Vie Ene 12, 2018 8:36 am

Hola.
Como te ha contestado mauricio en este tema Ayuda Urgente:
este es un foro de soporte de usuarios para usuarios, todos voluntarios

Tienes que ayudarnos para que te podamos ayudar. ¿Qué quiero decir con esto? Pues que tendrías que subir un archivo Calc (no una imagen) con varias hojas, una para las definiciones de los campos (posición de comienzo, fin, longitud, ...) y otra con los datos tal y como los tienes ingresados (número, texto, fecha, hora, ...). Te recomiendo que los datos de esta última hoja sean ficticios, eso sí, respetando el formato de esos datos. Y también deberías subir el TXT de cómo debe quedar al final con los datos que has reflejado en la hoja/s de Calc. Y cuanta más información y explicaciones mejor, debes tener en cuenta que

    Los voluntarios del Foro no siempre tenemos tiempo para, partiendo de cero, crear un archivo que, al final, no se corresponderá exactamente con el problema planteado.
Y para otras futuras consultas, recuerda que, de acuerdo con la Guía de supervivencia de este Foro, con una vez que publiques tu consulta es suficiente.
Saludos cordiales.
LibreOffice 6.1.5 en Windows 7 / 10
Por favor, utiliza el Foro para tus consultas, no los mensajes privados
Avatar de Usuario
PepeOooSevilla
 
Mensajes: 1066
Registrado: Sab Abr 04, 2009 6:10 pm
Ubicación: Sevilla (España)

Re: Exportar a TXT

Notapor fgili » Vie Ene 12, 2018 9:39 am

Hola Gracias, si mira adjunto el archivo qeu estoy usando
solome falta lo que indico en la pregunta

Ya no se como hacerlo, estoy mareado con este tema
Adjuntos
debitoNuevo.ods
(17.26 KiB) 69 veces
Open Office 4.0 + Win 7
Avatar de Usuario
fgili
 
Mensajes: 39
Registrado: Lun Sep 02, 2013 2:34 pm

Re: Exportar a TXT

Notapor PepeOooSevilla » Vie Ene 12, 2018 1:39 pm

Hola.
Mira el archivo adjunto por si te vale.
Le he puesto el valor correspondiente según la imagen:

Código: Seleccionar todo   Expandir vistaContraer vista
        .....
   LongitudColumnas(0) = 4
   LongitudColumnas(1) = 5
   LongitudColumnas(2) = 8
   LongitudColumnas(3) = 8
        .....

La función que añade espacios en blanco cuando no se llega a la longitud total del campo es:

Código: Seleccionar todo   Expandir vistaContraer vista
Space(LongitudColumnas(Contador) - Len(DatoCelda))

Saludos cordiales.
Adjuntos
debitoNuevo_v2.ods
(16.26 KiB) 77 veces
LibreOffice 6.1.5 en Windows 7 / 10
Por favor, utiliza el Foro para tus consultas, no los mensajes privados
Avatar de Usuario
PepeOooSevilla
 
Mensajes: 1066
Registrado: Sab Abr 04, 2009 6:10 pm
Ubicación: Sevilla (España)

Re: Exportar a TXT

Notapor fgili » Vie Ene 12, 2018 3:53 pm

Gracias por Responder Pepe, si mira eso yo tambien lo habia cambiado pero no me sirve por eso lo deje en CERO, porque ese es el anco de cada columna

El problema es que cada celda de la tabla tiene que tener unos caracteres determinados, y si estos no se cumplen se deben rellenarse con caracteres en blanco

Tengo por ejemplo esta formula =A3 & REPETIR(" "; 4 - LARGO(A3)) como hago para añadirla a la macro actual para que cuando convierta el txt tambien haga esta funcion

deberia tener una formula para cada celda ya que dodas son distintas

POr Ejemplo:

A1 debe tener 4 caracteres B1 5 caracteres C1 20 caracteres (si se ponen menos se debe completar con espacios en blanco) D1 2 caracteres
A2 2 caracteres . . .
. . . .. etc

Al crear el txt la separacion la dan los especios en blanco (por eso esta en CERO el espacio entre colomnas de la macro)

Espero se haya entendido
Open Office 4.0 + Win 7
Avatar de Usuario
fgili
 
Mensajes: 39
Registrado: Lun Sep 02, 2013 2:34 pm

Re: Exportar a TXT

Notapor PepeOooSevilla » Vie Ene 12, 2018 7:02 pm

Hola.
Empecemos de nuevo. En una tabla cuando hablamos de líneas nos estamos refiriendo a registros y cuando hablamos de columnas nos referimos a campos.
Dices en tu primer post
Son 5 lineas

    PREGUNTA: ¿El TXT resultante siempre va a tener 5 líneas, es decir, 5 registros?
cada linea tiene unos campos determinados

    PREGUNTA: Entonces la imagen con la descripción y anchura de los campos ¿a qué línea se refiere? ¿Sólo a la primera o a todas?
Si sólo se refiere a la primera línea

    PREGUNTA: ¿Cuáles son las descripciones y anchura de los campos de las líneas 2 a 5? Por favor, no subas imágenes, sube las definiciones en un archivo Calc.
En el post anterior comentas
... lo deje en CERO, porque ese es el ancho de cada columna

No entiendo, si la anchura es cero entonces no se puede rellenar con espacios, es como si ese campo (columna) no existiera.

Espero tus respuestas ...
Saludos cordiales.
LibreOffice 6.1.5 en Windows 7 / 10
Por favor, utiliza el Foro para tus consultas, no los mensajes privados
Avatar de Usuario
PepeOooSevilla
 
Mensajes: 1066
Registrado: Sab Abr 04, 2009 6:10 pm
Ubicación: Sevilla (España)

Re: Exportar a TXT

Notapor fgili » Vie Ene 12, 2018 9:30 pm

Muchas Gracias por responder , aqui a ver si lo puedo aclarar

PREGUNTA: ¿El TXT resultante siempre va a tener 5 líneas, es decir, 5 registros?

SI, eso es digamos los datos que deben entrar para cada cliente


PREGUNTA: Entonces la imagen con la descripción y anchura de los campos ¿a qué línea se refiere? ¿Sólo a la primera o a todas?

SI corresponde solo a la primera linea ( A1, B1, C1 . . . O1)


PREGUNTA: ¿Cuáles son las descripciones y anchura de los campos de las líneas 2 a 5? Por favor, no subas imágenes, sube las definiciones en un archivo Calc.
Subo un archivo con la cantidad de caracteres para cada celda

No entiendo, si la anchura es cero entonces no se puede rellenar con espacios, es como si ese campo (columna) no existiera.
Si porque ese valor me daba la separación entre la columna A Completa A1, A2, A3, A4 y A5 entonces si el valor de A2 fuera diferente no tengo manera de cambiarlo

Espero se entienda,
Muchas Gracias de nuevo
Adjuntos
muestra.ods
(16.59 KiB) 65 veces
Open Office 4.0 + Win 7
Avatar de Usuario
fgili
 
Mensajes: 39
Registrado: Lun Sep 02, 2013 2:34 pm

Re: Exportar a TXT

Notapor PepeOooSevilla » Sab Ene 13, 2018 9:14 am

Hola.

Comprueba si el archivo adjunto cumple con tus requisitos.
He de comentar unas cosas:

    1. En el TXT que subiste van 6 líneas en lugar de 5. Para las pruebas he eliminado la línea 5 de ese archivo TXT.
    2. En la definición de la línea 2, columna O, indicas una longitud de 86. La he modificado a 65 porque se pasaba de los 250 caracteres por línea que, supongo, es el máximo de caracteres por línea.
    3. Al ser siempre 5 líneas no es necesario el Do While ya que, como cada línea tiene una definición distinta, he tratado cada línea individualmente.
Por favor, haz pruebas (que siempre serán pocas :D ).

Si estás interesado en la programación de macros para OpenOffice/LibreOffice tienes que leer el libro Aprendiendo OOo Basic de nuestro compañero mauricio .

También en las páginas Manuales de Apache OpenOffice en español: Basic y, Basic OpenOffice: Apache OpenOffice Basic en español de nuestro compañero SLV-es, encontrarás muy buena información.

Saludos cordiales.
Adjuntos
debitoNuevo_v3.ods
(19.81 KiB) 91 veces
LibreOffice 6.1.5 en Windows 7 / 10
Por favor, utiliza el Foro para tus consultas, no los mensajes privados
Avatar de Usuario
PepeOooSevilla
 
Mensajes: 1066
Registrado: Sab Abr 04, 2009 6:10 pm
Ubicación: Sevilla (España)

Re: Exportar a TXT

Notapor fgili » Sab Ene 13, 2018 10:47 am

Muchas Gracias, me funcionó, ahora le voy a poner los datos reales y lo paso

Una consulta, antes yo podia agregar "lineas" sin modificar la macro porque esta leia hasta "Fin Listado"
Ahora que has modificado las lineas de forma iindividual, que parte del código tendría qu erepetir en caso de querer agregar mas lineas?


Ah! Gracias por la sugerencia de manuales los voy a mirar a ver si puedo aprender un poco :-)


PD: yo uso LibreOffice es lo mismo?
Última edición por fgili el Sab Ene 13, 2018 6:06 pm, editado 1 vez en total
Open Office 4.0 + Win 7
Avatar de Usuario
fgili
 
Mensajes: 39
Registrado: Lun Sep 02, 2013 2:34 pm

Re: Exportar a TXT

Notapor PepeOooSevilla » Dom Ene 14, 2018 10:26 am

Hola.
Entonces ...

    1. ¿El TXT resultante puede tener 5, 6, ..., n líneas? (n es un número entero).
    2. ¿Tiene ese TXT un patrón en la posición de las líneas?. Ejemplo:
    - La primera línea siempre es del tipo 1 (definición de la fila 3 del archivo muestra.ods que subiste).
    - La segunda línea siempre es del tipo 2 (definición de la fila 4 del mismo archivo anterior).
    - La tercera línea y siguientes siempre son del tipo 3 (definición de la fila 5. Las definiciones de las filas 5 y 6 son iguales).
    - La última línea siempre es de tipo 5. (definición de la fila 7).
    3. Si no existe un patrón entonces habría que añadir una columna auxiliar en la que se indique el tipo de definición de línea para poder tratarla adecuadamente. ¿Es éste el caso?. Ejemplo:
    - Línea 1 de tipo x.
    - Línea 2 de tipo y.
    - Línea 3 de tipo z.
    - ...
    - Última línea de tipo t.
    4. Y añade información precisa sobre cualquier otro requisito que no hayas comentado.
yo uso LibreOffice es lo mismo?

La programación OOBasic a nivel de principiante, por ahora, es igual en OpenOffice como LibreOffice.
Saludos cordiales.
LibreOffice 6.1.5 en Windows 7 / 10
Por favor, utiliza el Foro para tus consultas, no los mensajes privados
Avatar de Usuario
PepeOooSevilla
 
Mensajes: 1066
Registrado: Sab Abr 04, 2009 6:10 pm
Ubicación: Sevilla (España)

Re: Exportar a TXT

Notapor fgili » Lun Ene 15, 2018 3:52 pm

Muchas Gracias, voy a averiguar bien los registros que son fijos y los que cambian
en todo caso abro otro post.
La converción a txt actual funcionó correctamente
Open Office 4.0 + Win 7
Avatar de Usuario
fgili
 
Mensajes: 39
Registrado: Lun Sep 02, 2013 2:34 pm


Volver a Calc

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 9 invitados