[RESUELTO] Formato de la hora al combinar Base con Writer

Discute sobre las herramientas de la base de datos
Responder
jopicach
Mensajes: 143
Registrado: Dom Nov 20, 2016 3:24 pm
Ubicación: Almería (España)

[RESUELTO] Formato de la hora al combinar Base con Writer

Mensaje por jopicach »

 Editado:  
Hola,

Hace un tiempo en este foro obtuve ayuda para combinar texto de una base de datos con Writer y la solución fue muy buena, tuve un problema al combinar con la fecha pero me dieron la solución, el problema que me ha surgido ahora es en el código de la macro para las horas, no consigo que le de el formato que deseo. Inserto la macro y adjunto el archivo de ejemplo para mejor visualización. En color rojo esta el código que he añadido, pero no funciona

Gracias.

Sub replace_fields(doc, form)
sd = doc.createSearchDescriptor()
sd.SearchCaseSensitive = False
sd.SearchRegularExpression = False

'Los campos del formulario
fields = form.Columns.getElementNames()
For i = LBound(fields) To UBound(fields)
sd.setSearchString("%" + fields(i) + "%")
found = doc.findAll(sd)
If found.Count > 0 Then
field = form.Columns.getByName(fields(i))
value = form.getString(i+1)
If field.TypeName = "DATE" Then
value = Format(form.getLong(i+1)+2, "DD/MM/YYYY")
'End If
If field.TypeName = "DATETIME" Then
value = Format(form.getLong(i+1), "HH:MM")

END IF
END IF
For f = 0 To found.Count - 1
t = found.getByIndex(f)
t.setString(value)
Next f
END IF
Next i

End Sub
Adjuntos
Combinar texto.zip
(22.97 KiB) Descargado 102 veces
Última edición por mauricio el Dom Dic 03, 2017 9:15 pm, editado 2 veces en total.
Razón: Marcar icono de resuelto
LibreOffice versión: 7.0.5.2 (x64) - Windows 10 Pro 64 bits
Longi
Mensajes: 804
Registrado: Dom Ene 20, 2013 9:05 pm
Ubicación: Ourense, Galicia, España

Re: Formato de la hora al combinar Base con Writer

Mensaje por Longi »

Buenas!

Para ese mismo parche usé el siguiente código que va bien:

Código: Seleccionar todo

           If fields(i) = "FECHA" Then                                                          ' Si el campo es una fecha
              dates= Cdate (LEFT(FECHA,4)&"-"& RIGHT(LEFT(FECHA,7),2)&"-"& RIGHT(LEFT(FECHA,10),2)) ' Valor de la fecha
              value=  Format(dates, "DD")&" de "& Format(dates,"MMMM") &" de " & Format(dates, "YYYY") ' Traducción de la fecha
           End If                                                                               ' Acabamos condición de ser una fecha
Supongo que aplicando las modificaciones oportunas para las horas, sería suficiente.

Un saludo!
Openoffice 4.1.7, en Windows 10
Libreoffice 6.4.2, en Windows 10
jopicach
Mensajes: 143
Registrado: Dom Nov 20, 2016 3:24 pm
Ubicación: Almería (España)

Re: Formato de la hora al combinar Base con Writer

Mensaje por jopicach »

Muchas gracias por tu respuesta.

Con el formato de la fecha no tengo problema, es con el de la hora, suponía que sería modificar algo del que tengo marcado en rojo. Respecto al que has puesto, no se modificarlo para las horas.

He intentado con este pero me sale 00:00

If field.TypeName = "TIME" Then
value = Format(form.getLong(i),"hh:mm")
End If

Gracias.
LibreOffice versión: 7.0.5.2 (x64) - Windows 10 Pro 64 bits
Longi
Mensajes: 804
Registrado: Dom Ene 20, 2013 9:05 pm
Ubicación: Ourense, Galicia, España

Re: Formato de la hora al combinar Base con Writer

Mensaje por Longi »

Buenas otra vez.
El truco era que cambiases las cosas según tus necesidades, no que se te hiciese todo el trabajo....

Mira a ver si esto lo puedes adaptar:

Código: Seleccionar todo

TIME= NOW()
          ' If fields(i) = "TIME" Then                                                          ' Si el campo es tipo time
              Time= LEFT(TIME,2)&":"& RIGHT(LEFT(TIME,5),2)&":"& RIGHT(LEFT(TIME,8),2) ' Valor de la hora
              value= "Son las " & Format(Time, "hh")&" horas, "& Format(Time,"mm") &" minutos y " & Format(Time, "ss")&" segundos." ' Traducción de la hora
            'msgbox value          
 'End If                                                                               ' Acabamos condición de ser un campo tipo time
El 'value' es solo una forma en la que se puede presentar, por lo que puedes quitar la literatura o añadir más.
Puse de ejemplo la hora actual (NOW()), pero lógicamente, será el valor del campo que quieras usar.
Puedes usarla como macro independiente para probar si te funciona y con qué formato (activando el msgbox value, claro) antes de integrarlo en tu código final.

Otro saludo! :)
Openoffice 4.1.7, en Windows 10
Libreoffice 6.4.2, en Windows 10
jopicach
Mensajes: 143
Registrado: Dom Nov 20, 2016 3:24 pm
Ubicación: Almería (España)

Re: Formato de la hora al combinar Base con Writer

Mensaje por jopicach »

Gracias de nuevo Longi.

Nada, que ni aún con tu ejemplo lo se adaptar al mio. No es que quiera que me hagan el trabajo, es que estoy muy verde en código, aunque tengo la guía de Mauricio y algo más que he encontrado en la red, pero no lo suficiente.

De momento haré una chapuza para poder seguir trabajando Cambiaré el tipo de campo en la tabla, lo cambiaré de hora a texto, así no hay problema al combinar el texto.

Dejaré el tema abierto unos días por si alguien sugiere alguna solución más sencilla para mí. Creía que solo había que cambiar alguna palabra, como en la parte que se refiere a la fecha.

Gracias.
LibreOffice versión: 7.0.5.2 (x64) - Windows 10 Pro 64 bits
Longi
Mensajes: 804
Registrado: Dom Ene 20, 2013 9:05 pm
Ubicación: Ourense, Galicia, España

Re: Formato de la hora al combinar Base con Writer

Mensaje por Longi »

Sub replace_fields(doc, form)
sd = doc.createSearchDescriptor()
sd.SearchCaseSensitive = False
sd.SearchRegularExpression = False

'Los campos del formulario
fields = form.Columns.getElementNames()
For i = LBound(fields) To UBound(fields)
sd.setSearchString("%" + fields(i) + "%")
found = doc.findAll(sd)
If found.Count > 0 Then
field = form.Columns.getByName(fields(i))
value = form.getString(i+1)
If field.TypeName = "DATE" Then
value = Format(form.getLong(i+1)+2, "DD/MM/YYYY")
'End If
If fields(i) = "Nombre_de_Tu_Campo" Then ' Si el campo es tipo time
Time= LEFT(Nombre_de_Tu_Campo,2)&":"& RIGHT(LEFT(Nombre_de_Tu_Campo,5),2)&":"& RIGHT(LEFT(Nombre_de_Tu_Campo,8),2) ' Valor de la hora
value= "Son las " & Format(Nombre_de_Tu_Campo, "hh")&" horas, "& Format(Nombre_de_Tu_Campo,"mm") &" minutos y " & Format(Nombre_de_Tu_Campo, "ss")&" segundos." ' Traducción de la hora
END IF

For f = 0 To found.Count - 1
t = found.getByIndex(f)
t.setString(value)
Next f
END IF
Next i

Mira a ver si así funciona.
Openoffice 4.1.7, en Windows 10
Libreoffice 6.4.2, en Windows 10
jopicach
Mensajes: 143
Registrado: Dom Nov 20, 2016 3:24 pm
Ubicación: Almería (España)

Re: Formato de la hora al combinar Base con Writer

Mensaje por jopicach »

Hola de nuevo y gracias.

No me funciona. ¿De todas formas no se podría adaptar este código a los campos del tipo HORA en general?

If field.TypeName = "DATE" Then
value = Format(form.getLong(i+1)+2, "DD/MM/YYYY")
'End If

Para el formato de fecha va muy bien, ya que formatea todos los campos de todas las plantillas, no hay que poner el nombre de cada campo.


Un saludo.
LibreOffice versión: 7.0.5.2 (x64) - Windows 10 Pro 64 bits
Longi
Mensajes: 804
Registrado: Dom Ene 20, 2013 9:05 pm
Ubicación: Ourense, Galicia, España

Re: Formato de la hora al combinar Base con Writer

Mensaje por Longi »

Mira a ver así:

Código: Seleccionar todo

If field.TypeName = "TIME" Then
Time= LEFT(fields(i),2)&":"& RIGHT(LEFT(fields(i),5),2)&":"& RIGHT(LEFT(fields(i),8),2) ' Valor de la hora
value= "Son las " & Format(Time, "hh")&" horas, "& Format(Time,"mm") &" minutos y " & Format(Time, "ss")&" segundos." 
End If
Lo probé en tu base de ejemplo y parece ir bien.

Otro saludo!
Openoffice 4.1.7, en Windows 10
Libreoffice 6.4.2, en Windows 10
jopicach
Mensajes: 143
Registrado: Dom Nov 20, 2016 3:24 pm
Ubicación: Almería (España)

Re: Formato de la hora al combinar Base con Writer

Mensaje por jopicach »

Hola Longi,

Muchas gracias por tu tiempo. He probado el código como puedes ver en el archivo que adjunto y sigue sin funcionar. Por favor, ¿puedes poner el archivo que probaste y que decías que iba bien?

Un saludo.
Adjuntos
Combinar texto1.zip
(23.03 KiB) Descargado 116 veces
LibreOffice versión: 7.0.5.2 (x64) - Windows 10 Pro 64 bits
Longi
Mensajes: 804
Registrado: Dom Ene 20, 2013 9:05 pm
Ubicación: Ourense, Galicia, España

Re: Formato de la hora al combinar Base con Writer

Mensaje por Longi »

Efectivamente las cosas no estaban bien.....
Espero haberlo remendado ya.
Terminé tratando el dato como un texto sin más.
Adjuntos
Nueva carpeta.7z
(21.87 KiB) Descargado 101 veces
Openoffice 4.1.7, en Windows 10
Libreoffice 6.4.2, en Windows 10
jopicach
Mensajes: 143
Registrado: Dom Nov 20, 2016 3:24 pm
Ubicación: Almería (España)

Re: Formato de la hora al combinar Base con Writer

Mensaje por jopicach »

Hola,

Efectivamente, ahora funciona perfectamente!!! Adaptaré el formato a mi plantilla.

Le he añadido esta línea para que en los campos de hora que no tengan datos no se queden los dos puntos solo ":"

If Tiempo = "" then
value=""
End If

Muchas gracias de nuevo.
LibreOffice versión: 7.0.5.2 (x64) - Windows 10 Pro 64 bits
Responder