Página 1 de 1

[RESUELTO] FunctionAccess se comporta diferente en OO/LO

NotaPublicado: Sab Dic 05, 2015 11:56 am
por ifanlo
Hola, amigos!

Me gustaría entender que pasa con el siguiente código:
Código: Seleccionar todo   Expandir vistaContraer vista
sub testFuncionCalc
Dim mDatos
   mDatos = Array( "05/12/2015", 2)
   msgbox FuncionCalc( "WEEKDAY", mDatos )  'Debe devolver 6 (sábado)
end sub

Function FuncionCalc( Nombre As String, Datos() )
  ' Esta función permite llamar a una función de Calc por su nombre en Inglés   
   Dim oSFA As Object
   oSFA = createUnoService( "com.sun.star.sheet.FunctionAccess" )
   FuncionCalc = oSFA.callFunction( Nombre, Datos() )
End Function

En LibreOffice funciona a la perfección pero en OpenOffice me muestra un hermoso "Se ha producido una excepción. Type: com.sun.star.lang.IllegalArgumentException".

He revisado la documentación por si encontraba lo que falla pero no sé verlo. ¿Alguna idea?

Gracias,

Re: FunctionAccess se comporta diferente en OO/LO

NotaPublicado: Sab Dic 05, 2015 1:58 pm
por SLV-es
La documentación de AOO dice que la fecha debe ser un número. ¿será eso?

https://wiki.openoffice.org/wiki/Docume ... Y_function

 Editado: El ejemplo pasa la fecha como cadena, pero en formato yyyy-mm-dd. Igual va a ser esto en lugar de lo otro 

Re: FunctionAccess se comporta diferente en OO/LO

NotaPublicado: Sab Dic 05, 2015 3:01 pm
por mauricio
Es eso...
Código: Seleccionar todo   Expandir vistaContraer vista
mDatos = Array(CLng(DateSerial(2015,12,5)), 2)

Un abrazo a ambos...

Re: FunctionAccess se comporta diferente en OO/LO

NotaPublicado: Sab Dic 05, 2015 6:08 pm
por ifanlo
Gracias, amigos!

Salva, ¿dónde dice eso? que no sé verlo en el enlace que me pasas.

Lo más aproximado que encuentro es "returns the day of the week that date falls on, as a number", pero entiendo que el "as a number" se refiere al resultado devuelto por la función. Mi anglo-analfabetismo también puede ser un factor.

Pero, efectivamente si le pasas la fecha como "aaaa-mm-dd" lo admite.

Luego, el truco que muestra Mauricio de convertir a Long la fecha, también funciona perfectamente.

Pero no me diréis que está bien documentado, eh?

Un abrazo,

Re: [RESUELTO] FunctionAccess se comporta diferente en OO/LO

NotaPublicado: Sab Dic 05, 2015 9:22 pm
por SLV-es
El anglo-analfabetismo y las prisas (pues me llamaban para comer) tienen la culpa. Yo soy inocente :roll:

Efectivamente, leí y traducí mal. El "as a number" se refiere a lo que devuelve la función.

Pero me alegro haber ayudado de alguna forma, aunque la primera fuera un error

the error is not my fault, it's the fault of the British because they speak rare ;) :lol:

Re: [RESUELTO] FunctionAccess se comporta diferente en OO/LO

NotaPublicado: Dom Dic 06, 2015 8:09 pm
por ifanlo
Aunque puse un ejemplo especialmente estilizado para verlo en el foro, en realidad, esto debe hacerse sobre una fecha que hay en una celda.

Así que la carga del array que se pasa a FunctionAccess ha quedado finalmente como:
Código: Seleccionar todo   Expandir vistaContraer vista
      mDatos = Array( CLng( cDate ( oCelda.GetString() ) ), 0 )
      diasemana =  FuncionCalc( "WEEKDAY", mDatos() )


Como la fecha se recupera como String se le aplica doble conversión a Date y a Long para que FunctionAccess no pete.

Al escribir esto pienso que, si recupero el contenido de la celda con GetData en vez de con GetString, igual me ahorro una conversión.

Bueno, muchas gracias por vuestra ayuda. Hasta pronto.