You are viewing a plain text version of this content. The canonical link for it is here.
Posted to utenti-it@openoffice.apache.org by Paolo Mantovani <p_...@libero.it> on 2012/03/06 21:16:50 UTC

[utenti] Re: [ooo-utenti-it] invocare funzioni builtin dal Basic

Ho inviato questa mail stamattina ma non è ancora apparsa in lista
Vediamo se questa arriva...


Il 06/03/2012 14:05, efa@iol.it ha scritto:
[....]
>> Il 06/03/2012 00:36, Valerio Messina ha scritto:
>>> ciao, sto cercando di implementare il calcolo della parità binaria,
>>> che manca tra le funzioni di OO.
>>
>> Sarebbe opportuno specificare se si sta usando OOo o Libò, visto che
>> i due prodotti cominciano a divergere (per ora marginalmente) La
>> specifica è ancora più importante se si parla di programmazione.
>
> la mia intenzione è di farlo funzionare con OO, l'ho specificato nella mail e
> ho scritto alla mail-list di OO. Se poi va anche su LO molto meglio.
>
>
>> Ad
>> esempio, in OOo non esiste a livello API una funzione "DEC2BIN"
>
> A livello di API non so niente, ma la funzione DEC2BIN esiste in OO 3.3 Calc
> sezione funzioni "Add-in". Io ce l'ho sia su Ubuntu che su Windows, senza aver
> aggiunto pacchetti Add-in. Ce l'ho solo io?

si, esiste nella sezione sdd-in ma non si chiama "DEC2BIN" ma 
"DECIMALE.BINARIO"
A livello API invece non si possono usare i nomi locali delle formule 
perciò occorre usare il cosiddetto "programmatic name" che in questo caso è
"com.sun.star.sheet.addin.Analysis.getDec2Bin"

Perciò il tuo codice per funzionare avrebbe dovuto richiamare la 
funzione in questo modo:

----------
v = 23
svc = CreateUnoService ("com.sun.star.sheet.FunctionAccess")
arg1 = Array (v, 10)
result = _
svc.callFunction("com.sun.star.sheet.addin.Analysis.getDec2Bin",arg1)
print result
----------

perciò nel tuo esempio e nella tua prima esposizione ci sono parecchie 
cose strane dal mio punto di vista.

Forse usi una localizzazione USA ma anche in questo caso, quando si 
fanno domande sulle funzioni di Calc, almeno specificare se si usa una 
versione o una localizzazione particolare sarebbe di aiuto.


> La mia richiesta di aiuto era perché vorrei richiamare questa funzione di Calc
> dal codice Basic.
> Ora mi fai venire il sospetto che "builtin" non siano le funzioni di Calc?

sono funzioni aggiuntive mantenute in un pacchetto separato ma che viene 
comunque installato insieme a OOo


>>> A dire il vero a OO mancano anche tutte le funzioni di
>>> manipolazione a bit.
>>
>> Interessante, si tratta di funzioni presenti in altri prodotti
>> concorrenti?
>
> in LO 3.5 ci sono queste funzioni nel gruppo Mathematical:
> BITAND, BITLSHIFT, BITOR, BITRSHIFT, BITXOR (che mi sono reimplementato in OO
> con il Basic, ma che accettano argomenti già in binario),

ecco, vorrei dare un occhiata al codice delle funzioni che hai già 
reimplementato. è possibile?



> oltre alle trigonometriche: CSC, CSCH, SEC, SECH
>
>
>>> In ogni caso il calcolo della parità necessita solo di BITRSHIFT,
>>> BITXOR e BITAND. Dato che l'argomento del mio foglio è decimale,
>>> vorrei prima invocare la DEC2BIN nel codice Basic.
>>
>> Perchè?
>
> perché vorrei evitare di inserire nel foglio due funzioni nidificate:
>
> A1=23
> =NOT(DEC2BIN(A1))
> ma solo:
> =NOT(A1)
>
> perché la formula della parità ha già 5-6 livelli di parentesi.


si ma non ha senso convertire la rappresentazione dei numeri in binario 
(rappresentazione che non esiste e perciò deve essere simulata mediante 
una stringa) prima di passarli ad una funzione Basic che lavora con i numeri



>> probabilmente perchè stai cercando di eseguire il NOT su una stringa
>
> sospettavo, quindi NOT si aspetta un numero, e la DEC2BIN restituisce una
> stringa?

si


>
> Come devo fare per avere il negato bit a bit del valore in A1?
> Esempio:

>
> A1=23  (cioé 10111 in binario)
> =NOT(A1)
> ottenere 01000 come risultato

la funzione NOT di Calc (NON nella localizzazione italiana) non funziona 
bit per bit perciò devi creare una semplice funzione BitNOT in Basic

Function BitNOT(vValue As Variant) As Variant
     BitNOT = NOT vValue
End Function

(senza usare conversioni)

saluti
Paolo M