[RESUELTO] Formato de fecha y Visual Basic

Discute sobre la aplicación de hojas de cálculo
Responder
eligioalmuedo
Mensajes: 8
Registrado: Vie Ene 08, 2010 9:51 am

[RESUELTO] Formato de fecha y Visual Basic

Mensaje por eligioalmuedo »

Buen@s. Tengo una duda que supongo sera facil de solucionar. Necesito dar formato de fecha a una celda de Calc, antes de abrir el documento desde Visual basic. El resto de formatos como tamaño, fuente, alineacion, etc... si los controlo sacado de varios ejemplos que encontré en la red, pero dar formato a una celda con formato de fecha no lo pillo. Os dejo las lineas de codigo de Visual Basic que uso para los demas formatos. Gracias por adelantado:

Set Oo = Document.getSheets().getByIndex(0)

Set Plage = Oo.getCellRangeByPosition(0, 0, 13, 499) 'zona de 500x14
Call Plage.SetPropertyValue("CharHeight", 8) 'Tamaño de texto
Call Plage.SetPropertyValue("CharFontName", "Frutiger-Light") 'Fuente de texto
Call Plage.SetPropertyValue("HoriJustify", 2) ' Centrado
Call Plage.SetPropertyValue("VertJustify", 2) ' Centrado
Última edición por mauricio el Mié Ago 23, 2017 4:57 am, editado 2 veces en total.
Razón: Marcar icono de resuelto
Windows XP Pro, Visual Basic 6.0, Open Office 3.1
Avatar de Usuario
mauricio
Mensajes: 6092
Registrado: Sab Nov 22, 2008 5:36 am
Ubicación: CDMX
Contactar:

Re: Formato de fecha y Visual Basic

Mensaje por mauricio »

Hola...

Tienes que usar la propiedad NumberFormat, algo así como:

Código: Seleccionar todo

Plage.NumberFormat = Entero
Donde Entero es un número entero que representa el formato, por ejemplo:

D/MM/AA 30
NN DD/MMM AA 31
MM/AA 32
DD/MMM 33
MMMM 34
QQ AA 35
DD/MM/AAAA 36

Toma en cuenta que los valores anteriores son en mi maquina, podrian ser diferentes en el tuyo. Tal ves te funcione:

Código: Seleccionar todo

Call Plage.SetPropertyValue("NumberFormat", 36) 
Y digo tal ves por que tiene años que no programo en VB. Pruebalo y si esto responde tu pregunta, por favor, marca el tema como [RESUELTO].

Saludos
______________________________________________
"Todo cuanto no podemos dar nos posee". - André Gide
LibreOffice 6.2 | ArchLinux | Gnome3
No respondo preguntas privadas, por favor, usa el foro
eligioalmuedo
Mensajes: 8
Registrado: Vie Ene 08, 2010 9:51 am

Re: Formato de fecha y Visual Basic

Mensaje por eligioalmuedo »

Gracias por tu pronta respuesta. En parte me has solucionado un paso que es el de que la columna que deseo tenga formato de fecha. Use el 36 como me dijistes. Sin embargo el resultado que obtengo sigue anteponiendo el mes al dia, saliendome 01/08/2009 para el dia de hoy que es dia 8 de enero. Si miro el formato de las celdas desde Oo todo parcere estar correcto. Incluso en la parte inferior de las propiedades aparece como si el formato usado se DD/MM/AAAA. No entiendo donde esta el problema.

He probado con un ejemplo sencillo para ver como actua el commando Format de Visual Basic y aunque obtengo la fecha en formato deseado, luego al exportarlo a Open Office me sale cambiado. Este es el codigo de un proyexto con un solo Textbox:

Private Sub Form_Load()
Text1 = Format(Date, "Short Date")
End Sub

El resultado es el esperado obteniendo 08/01/2010 para el dia de hoy. Luego en mi aplicacion uso esto otro para guardar el dato que luego exportaré a Oo:

FechaExcel = Format(Date, "Short Date")

Y luego en la parte donde configura la hoja de Calc:

Set Plage = Oo.getCellRangeByPosition(4, 1, 4, 504) ' La columna completa con 500 celdas
Plage.NumberFormat = 36 'Aplica formato de fecha ddmmaaaa

Luego entre las lineas de la exportacion queda:
Call Oo.getcellbyposition(4, 4 + Z).setFormula(FechaExcel)

Sin embargo al abrirse la hoja de Calc la columna de las fechas muestra 01-08-2009 siendo 8 de enero. Alguna idea de porque pasa esto?. Y una vez mas gracias
Windows XP Pro, Visual Basic 6.0, Open Office 3.1
FJCC-ES
Mensajes: 873
Registrado: Mié Mar 25, 2009 1:19 am
Ubicación: Colorado, USA

Re: Formato de fecha y Visual Basic

Mensaje por FJCC-ES »

Es posible que 36 no es el valor del Formato DD/MM/AAAA en su maquina. Este código ( en OOo Basic) encuentra el valor de cualquier formato

Código: Seleccionar todo

Dim sLocale as New com.sun.star.lang.Locale
oDoc = ThisComponent
NumForms = oDoc.getNumberFormats()
DateKey = NumForms.queryKey("DD/MM/AAAA", sLocale, True)
Print DateKey  
eligioalmuedo
Mensajes: 8
Registrado: Vie Ene 08, 2010 9:51 am

Re: Formato de fecha y Visual Basic

Mensaje por eligioalmuedo »

FJCC-ES, gracias por abrirme un haz de luz a un problema que no venia oliendome resolverlo. Como hago funcionar el codigo que me mandas, ya que me tira error en la primera linea como "No se ha definido el tipo definido por el usuario". Igual esta incompleto o algo. Espero con ansia tu respuesta. Un saludo
Windows XP Pro, Visual Basic 6.0, Open Office 3.1
eligioalmuedo
Mensajes: 8
Registrado: Vie Ene 08, 2010 9:51 am

Re: Formato de fecha y Visual Basic

Mensaje por eligioalmuedo »

Mientras he intentado a tanteo, pero desde el 30 al 40 solo consigo formatos varios de fecha, pero siempre mantiene el mes como agosto, o sea cambiado. ¿Puede ser que la version 2.5 de Oo tenga ese bug?
Windows XP Pro, Visual Basic 6.0, Open Office 3.1
Avatar de Usuario
mauricio
Mensajes: 6092
Registrado: Sab Nov 22, 2008 5:36 am
Ubicación: CDMX
Contactar:

Re: Formato de fecha y Visual Basic

Mensaje por mauricio »

Hola...

El código que te puso el compañero no te funciona, por que asume que lo estas ejecutando desde OpenOffice.org, por tanto ThisComponent es desconocido desde VB, te recomiendo mucho hacer tus pruebas desde dentro de OOo y ya que esten funcionando solo las pasas a VB, según tu código, sin ver, tal vez te funcione.

Código: Seleccionar todo

'Esta linea no te funcionara pues es una estructura de OOo, tienes que crearla primero, como te muestro en el ejemplo anexo
Dim sLocale as New com.sun.star.lang.Locale
oDoc = Oo
NumForms = oDoc.getNumberFormats()
DateKey = NumForms.queryKey("DD/MM/AAAA", sLocale, True)
MsgBox DateKey
En el ejemplo que te anexo, te muestro como acceder a OOo y crear estructuras propias de el, lo hice hace muchos años pero creo sigue vigente. Primero debes de conocer como trabaja OOo si no quieres sufrir en VB, mi libro te puede servir.

Saludos
Adjuntos
Hacer reporte desde VB v003.zip
(110.37 KiB) Descargado 769 veces
______________________________________________
"Todo cuanto no podemos dar nos posee". - André Gide
LibreOffice 6.2 | ArchLinux | Gnome3
No respondo preguntas privadas, por favor, usa el foro
eligioalmuedo
Mensajes: 8
Registrado: Vie Ene 08, 2010 9:51 am

Re: Formato de fecha y Visual Basic

Mensaje por eligioalmuedo »

Gracias otra vez Mauricio por tu interes. He estado probando de todo no consigo que funcione. Por ultimo creo que lo mejor sera probar en una maquina distinta a la mia con una sencilla prueba:

Pegad el siguiente codigo en un nuevo proyecto VB al que solo hay que ponerle un label1 en el formulario:

Código: Seleccionar todo

Private Sub Form_Load()
Dim ServiceManager As Object
Dim Desktop As Object
Dim Document As Object
Dim Oo As Object
Dim Plage As Object
Dim objCols As Object
Dim objCol As Object
Dim objRows As Object
Dim objRow As Object
Dim PrintArea(0)
Dim PrintArgs(2)

'Creacion de un servicio OpenOffice
Set ServiceManager = CreateObject("com.sun.star.ServiceManager")
Set Desktop = ServiceManager.createInstance("com.sun.star.frame.Desktop")
Dim args(1) As Object
Set args(0) = ServiceManager.Bridge_GetStruct("com.sun.star.beans.PropertyValue")
args(0).Name = "Hidden"
args(0).Value = True
Set Document = Desktop.loadComponentFromURL("private:factory/scalc", "_blank", 0, args)
Set Oo = Document.getSheets().getByIndex(0)

'Doy formato de fecha tipo dd/mm/aaaa a la celda 0,0
Set Plage = Oo.getCellRangeByPosition(0, 0, 0, 0)
Plage.NumberFormat = 36


'Almaceno la fecha del dia en una variable de formato fecha
Dim MiFecha As Date
MiFecha = Date

'Presento el valor en el label1
Label1 = MiFecha

'Cargo el valor de MiFecha en la celda 0,0
Call Oo.getcellbyposition(0, 0).setFormula(MiFecha)

'Abro la hoja Calc
Document.getCurrentController.getFrame.getContainerWindow.setVisible (True)
Document.getCurrentController.getFrame.getComponentWindow.setVisible (True)
End Sub
Con solo ejecutarlo me pasan dos cosas: La primera es que en el Label1 aparece la fecha del dia en el formato que necesito (DD/MM/AAAA). La segunda es que en la casilla 0,0 de la hoja Calc que se abre aparece la fecha en formato (MM/DD/AAAA).

¿Que se supone que estoy haciendo mal?
¿Obteneis vosotros el mismo resultado que yo?
¿Puede que sea problema de configuracion regional del propio Open Office de mi maquina? (todo esta puesto en Español-España)
¿Hasta donde se lava la cara un calvo?
¿Hay vida despues de la muerte?

En fin. Como ven esto esta empezando a afectarme un poco. A ver si conseguimos descubrir que pasa.
A TODOS GRACIAS POR LA AYUDA
Windows XP Pro, Visual Basic 6.0, Open Office 3.1
eligioalmuedo
Mensajes: 8
Registrado: Vie Ene 08, 2010 9:51 am

Re: Formato de fecha y Visual Basic

Mensaje por eligioalmuedo »

Por fin he resuelto el problema que ahora se me antoja tonto, pero que tantos quebraderos de cabeza me ha dado. Buscando buscado y rebuscando di con un hilo de un foro en el que hablaban de Visual Fox y pegaban un ejemplo. Entre las lineas de codigo pude comprobar que a la hora de insertar los datos de las celdas usaban varias maneras que no conocia que existian:

oSheet.getCellByPosition( 2, 1 ).setString
oSheet.getCellByPosition( 2, 2 ).setFormula
oSheet.getCellByPosition( 2, 3 ).setValue

Si os fijais en el hilo puse un ejemplo del codigo que estoy usando y corresponde a setFormula. Una vez que lo he cambiado por setString la fecha se ha corregido. Mas bien que corregido simplemente se ha escrito tal y como yo ya tenia tratada la cadena de texto en VB. Asi pues cierro el hilo y dejo esta informacion para enriquecer este foro de OOo que no conocia hasta antes de ayer. Un saludo a todos los foreros y en especial a Mauricio y a los que participaron en este hilo con su tiempo e interes. Un abrazo.

PD: Tambien cerrare otro post sobre como convertir una celda a texto que tenia y que se resuelve de la misma manera, que trataba de evitar que desapareciera el 0 inicial en cadenas de texto de tipo (01234) por ejemplo, que al exportarlas a Calc se comia el 0 inicial.
Windows XP Pro, Visual Basic 6.0, Open Office 3.1
Avatar de Usuario
mauricio
Mensajes: 6092
Registrado: Sab Nov 22, 2008 5:36 am
Ubicación: CDMX
Contactar:

Re: [RESUELTO] Formato de fecha y Visual Basic

Mensaje por mauricio »

Hola...

Que bueno que lo has resuelto, para ampliar y enriquecer el asunto te comento.

Efectivamente, tienes tres métodos para introducir información en las celdas setString, setFormula, setValue, si tu usas setString en cualquier valor, este, quedará como "texto" en la celda, por lo que si introduces una fecha, y despues quieres hacer operaciones con ella, tal vez, no te sea posible, lo correcto sería usar setValue y despues dar el formato correcto con NumberFormat y que, como sabes, las fechas con realmente valores. Todo esto y más lo trato en mi libro http://user.services.openoffice.org/es/ ... =50&t=1545

Mi recomendación es que hagas tus pruebas "directamente dentro" de OOo que tiene su IDE y te funcionaran todos los ejemplos que veas por aquí y los del libro, despues puedes pasarlos "casi" igual a VB, en lo personal no puedo probar tus ejemplos directamente en VB, por que hace muchos años que no uso Windows ni programo en VB, pero en la medida de lo posible intentamos ayudarte.

Saludos
______________________________________________
"Todo cuanto no podemos dar nos posee". - André Gide
LibreOffice 6.2 | ArchLinux | Gnome3
No respondo preguntas privadas, por favor, usa el foro
nabil9410
Mensajes: 3
Registrado: Mar Ago 22, 2017 7:19 pm

Re: [RESUELTO] Formato de fecha y Visual Basic

Mensaje por nabil9410 »

Hola, sé que ya tiene tiempo que éste tema fue solucionado, pero debo preguntar:
Sucede que tengo el mismo problema.
Al intentar imprimir una lista de fechas en excel con una macro, me intercambia el día con el mes, es decir

01/08/2017 = 08/01/2017, convirtiendo la fecha en 8 de enero...Lo más raro es que sólo hace eso con los primero doce días de un mes.
He buscado de todo, pero no logro darle solución a mi conflicto, y encontré éste post donde dicen que lograron solucionarlo.
Intenté ya hacerlo con lo que nos pusiste aquí.
eligioalmuedo escribió:oSheet.getCellByPosition( 2, 1 ).setString
oSheet.getCellByPosition( 2, 2 ).setFormula
oSheet.getCellByPosition( 2, 3 ).setValue
Pero lo cierto es que no he podido solucionarlo.
Espero que puedan ayudarme, y muchas gracias.
Avatar de Usuario
fornelasa
Mensajes: 3268
Registrado: Jue Feb 17, 2011 8:30 pm
Ubicación: Estado de México, México.

Re: [RESUELTO] Formato de fecha y Visual Basic

Mensaje por fornelasa »

Hola nabil9410, bienvenido al foro.
Este debate es un tema propio de ApacheOpenOffice/Libre Office Calc y no de Excel; sugiero ir al foro adecuado.
Si tu pregunta es relacionada con Calc por favor abre un tema nuevo y sube un archivo ejemplo para darle un vistazo.
Saludos, Federico.
lo 6.2.0 | aoo 4.1.6 | win 7/10
¡Un aplauso para todos los que luchan por proteger y promover la Web abierta!
nabil9410
Mensajes: 3
Registrado: Mar Ago 22, 2017 7:19 pm

Re: [RESUELTO] Formato de fecha y Visual Basic

Mensaje por nabil9410 »

Entiendo, supuse que al ser VB, tendría quizá la misma solución.
Muchas gracias de todos modos.
Pro, Visual Basic 6.0, Open Office 3.1
Avatar de Usuario
fornelasa
Mensajes: 3268
Registrado: Jue Feb 17, 2011 8:30 pm
Ubicación: Estado de México, México.

Re: [RESUELTO] Formato de fecha y Visual Basic

Mensaje por fornelasa »

Intenta abrir un tema nuevo; expón tu duda (si el tema tiene que ver con un archivo Calc) y de ser necesario envía un archivo ejemplo.
Saludos.
lo 6.2.0 | aoo 4.1.6 | win 7/10
¡Un aplauso para todos los que luchan por proteger y promover la Web abierta!
nabil9410
Mensajes: 3
Registrado: Mar Ago 22, 2017 7:19 pm

Re: [RESUELTO] Formato de fecha y Visual Basic

Mensaje por nabil9410 »

He encontrado la solución!!!
:D
Pero muchas gracias por el interés, Federico.
Un saludo
Pro, Visual Basic 6.0, Open Office 3.1
ppdglez
Mensajes: 1
Registrado: Lun Dic 17, 2018 3:47 pm

Re: [RESUELTO] Formato de fecha y Visual Basic

Mensaje por ppdglez »

Como pudo solucionarlo?
OpenOffice 3.1 en Windows Vista
Responder