[RESUELTO] Exportar a TXT

Discute sobre la aplicación de hojas de cálculo
Responder
Avatar de Usuario
fgili
Mensajes: 39
Registrado: Lun Sep 02, 2013 2:34 pm

[RESUELTO] Exportar a TXT

Mensaje por fgili »

Código: Seleccionar todo

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) Descargado 204 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
PepeOooSevilla
Mensajes: 1480
Registrado: Sab Abr 04, 2009 6:10 pm
Ubicación: Sevilla (España)

Re: Exportar a TXT

Mensaje por PepeOooSevilla »

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.4.6. Windows 10. Java 8 rev. 261 (64 bits)
Por favor, utiliza el Foro para tus consultas, no los mensajes privados
Si usas OpenOffice/LibreOffice trabaja y guarda en ODT, ODS, ODP, ... Y haz copias de seguridad.
Avatar de Usuario
fgili
Mensajes: 39
Registrado: Lun Sep 02, 2013 2:34 pm

Re: Exportar a TXT

Mensaje por fgili »

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) Descargado 226 veces
Open Office 4.0 + Win 7
Avatar de Usuario
PepeOooSevilla
Mensajes: 1480
Registrado: Sab Abr 04, 2009 6:10 pm
Ubicación: Sevilla (España)

Re: Exportar a TXT

Mensaje por PepeOooSevilla »

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

Código: Seleccionar todo

        .....
	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

Space(LongitudColumnas(Contador) - Len(DatoCelda))
Saludos cordiales.
Adjuntos
debitoNuevo_v2.ods
(16.26 KiB) Descargado 272 veces
LibreOffice 6.4.6. Windows 10. Java 8 rev. 261 (64 bits)
Por favor, utiliza el Foro para tus consultas, no los mensajes privados
Si usas OpenOffice/LibreOffice trabaja y guarda en ODT, ODS, ODP, ... Y haz copias de seguridad.
Avatar de Usuario
fgili
Mensajes: 39
Registrado: Lun Sep 02, 2013 2:34 pm

Re: Exportar a TXT

Mensaje por fgili »

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
PepeOooSevilla
Mensajes: 1480
Registrado: Sab Abr 04, 2009 6:10 pm
Ubicación: Sevilla (España)

Re: Exportar a TXT

Mensaje por PepeOooSevilla »

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.4.6. Windows 10. Java 8 rev. 261 (64 bits)
Por favor, utiliza el Foro para tus consultas, no los mensajes privados
Si usas OpenOffice/LibreOffice trabaja y guarda en ODT, ODS, ODP, ... Y haz copias de seguridad.
Avatar de Usuario
fgili
Mensajes: 39
Registrado: Lun Sep 02, 2013 2:34 pm

Re: Exportar a TXT

Mensaje por fgili »

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) Descargado 229 veces
Open Office 4.0 + Win 7
Avatar de Usuario
PepeOooSevilla
Mensajes: 1480
Registrado: Sab Abr 04, 2009 6:10 pm
Ubicación: Sevilla (España)

Re: Exportar a TXT

Mensaje por PepeOooSevilla »

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) Descargado 259 veces
LibreOffice 6.4.6. Windows 10. Java 8 rev. 261 (64 bits)
Por favor, utiliza el Foro para tus consultas, no los mensajes privados
Si usas OpenOffice/LibreOffice trabaja y guarda en ODT, ODS, ODP, ... Y haz copias de seguridad.
Avatar de Usuario
fgili
Mensajes: 39
Registrado: Lun Sep 02, 2013 2:34 pm

Re: Exportar a TXT

Mensaje por fgili »

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
PepeOooSevilla
Mensajes: 1480
Registrado: Sab Abr 04, 2009 6:10 pm
Ubicación: Sevilla (España)

Re: Exportar a TXT

Mensaje por PepeOooSevilla »

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.4.6. Windows 10. Java 8 rev. 261 (64 bits)
Por favor, utiliza el Foro para tus consultas, no los mensajes privados
Si usas OpenOffice/LibreOffice trabaja y guarda en ODT, ODS, ODP, ... Y haz copias de seguridad.
Avatar de Usuario
fgili
Mensajes: 39
Registrado: Lun Sep 02, 2013 2:34 pm

Re: Exportar a TXT

Mensaje por fgili »

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
Responder