Página 1 de 1

[RESUELTO] Formato de fecha y Visual Basic

Publicado: Vie Ene 08, 2010 9:57 am
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

Re: Formato de fecha y Visual Basic

Publicado: Vie Ene 08, 2010 10:23 am
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

Re: Formato de fecha y Visual Basic

Publicado: Vie Ene 08, 2010 12:27 pm
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

Re: Formato de fecha y Visual Basic

Publicado: Vie Ene 08, 2010 5:35 pm
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  

Re: Formato de fecha y Visual Basic

Publicado: Vie Ene 08, 2010 7:00 pm
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

Re: Formato de fecha y Visual Basic

Publicado: Vie Ene 08, 2010 7:05 pm
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?

Re: Formato de fecha y Visual Basic

Publicado: Vie Ene 08, 2010 7:44 pm
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

Re: Formato de fecha y Visual Basic

Publicado: Sab Ene 09, 2010 9:10 am
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

Re: Formato de fecha y Visual Basic

Publicado: Sab Ene 09, 2010 12:38 pm
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.

Re: [RESUELTO] Formato de fecha y Visual Basic

Publicado: Sab Ene 09, 2010 7:34 pm
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

Re: [RESUELTO] Formato de fecha y Visual Basic

Publicado: Mar Ago 22, 2017 7:40 pm
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.

Re: [RESUELTO] Formato de fecha y Visual Basic

Publicado: Mar Ago 22, 2017 8:28 pm
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.

Re: [RESUELTO] Formato de fecha y Visual Basic

Publicado: Mar Ago 22, 2017 9:00 pm
por nabil9410
Entiendo, supuse que al ser VB, tendría quizá la misma solución.
Muchas gracias de todos modos.

Re: [RESUELTO] Formato de fecha y Visual Basic

Publicado: Mar Ago 22, 2017 9:07 pm
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.

Re: [RESUELTO] Formato de fecha y Visual Basic

Publicado: Mar Ago 22, 2017 11:06 pm
por nabil9410
He encontrado la solución!!!
:D
Pero muchas gracias por el interés, Federico.
Un saludo

Re: [RESUELTO] Formato de fecha y Visual Basic

Publicado: Lun Dic 17, 2018 3:55 pm
por ppdglez
Como pudo solucionarlo?