[RISOLTO] Calc: aggiornamento cella

Creare una macro - Scrivere uno script - Usare le API
Rispondi
tomsor
Messaggi: 10
Iscritto il: sabato 11 agosto 2018, 20:33

[RISOLTO] Calc: aggiornamento cella

Messaggio da tomsor »

Salve.
Ho un problema da risolvere e spero che qualcuno possa essermi d'aiuto.
Ecco di che si tratta.
Si registri questa funzione:

function prova()
oCell = ThisComponent.Sheets(0).getCellByPosition(0,0) 'riferimnento ad A1
oCell.SetString("Hello!")
end function

e la si inserisca in una cella qualsiasi del foglio (ma, ovviamente, non in A1).

Ci si dovrebbe aspettare, secondo me, di veder comparire 'Hello!' in A1, ma questo non accade. Se invece si chiude il foglio (salvando le modifiche) e lo si fa nuovamente ripartire (abilitandolo alla esecuzione delle macro) allora finalmente in A1 compare la scritta 'Hello!'.
Domanda: è possibile fare in modo che l'aggiornamento di A1 sia immediato, e cioè non vincolato alla riapertura del foglio?
Grazie a chi vorrà perdere qualche minuto su questo quesito.

P.S. L'opzione 'calcolo automatico' da 'Strumenti/contenuto celle' risulta spuntata; inoltre F9 sembra, in questo caso, non funzionare.
Ultima modifica di tomsor il mercoledì 29 agosto 2018, 17:11, modificato 1 volta in totale.
openoffice 4.1.5; windows 10
hubert lambert
Volontario
Volontario
Messaggi: 164
Iscritto il: venerdì 9 giugno 2017, 13:48

Re: Calc: aggiornamento cella

Messaggio da hubert lambert »

Ciao,

Con OpenOffice, non è possibile utilizzare una funzione personale per modificare una cella diversa da quella che contiene la funzione (invece ciò si può fare con LibreOffice).
L'uso del servizio AsyncCallback, come spiegato qui, permette di ottenere lo stesso risultato:

Codice: Seleziona tutto

function prova()
	ac = createUnoService("com.sun.star.awt.AsyncCallback")
	oCallback = createUnoListener( "callback_", "com.sun.star.awt.XCallback" )
	ac.addCallback(oCallback, "A1")
end function

sub callback_notify(cell)
	oCell = ThisComponent.Sheets(0).getCellRangeByName(cell)
	oCell.SetString("Hello!")
end sub
Saluti.
OpenOffice 4.1.2/4.1.4 | LibreOffice 5.4.4/6.0
Win7 + LinuxMint
tomsor
Messaggi: 10
Iscritto il: sabato 11 agosto 2018, 20:33

Re: Calc: aggiornamento cella

Messaggio da tomsor »

Proverò e studierò gli spunti che mi ha dato. Grazie.
openoffice 4.1.5; windows 10
tomsor
Messaggi: 10
Iscritto il: sabato 11 agosto 2018, 20:33

Re: Calc: aggiornamento cella

Messaggio da tomsor »

Tutto OK, come pensavo, e di nuovo grazie.
Ho, non me ne voglia, ancora una nuova domanda:
il parametro 'cell' passato a callback_notify può essere sostituito da una struttura dati da cui lo stesso parametro può essere estratto?
A me la cosa sembra non funzionare.
Saluti.
openoffice 4.1.5; windows 10
hubert lambert
Volontario
Volontario
Messaggi: 164
Iscritto il: venerdì 9 giugno 2017, 13:48

Re: Calc: aggiornamento cella

Messaggio da hubert lambert »

Non sono certo di bene capire, ma prova con questa variante:

Codice: Seleziona tutto

function prova()
   ac = createUnoService("com.sun.star.awt.AsyncCallback")
   oCallback = createUnoListener( "callback_", "com.sun.star.awt.XCallback" )
   ac.addCallback(oCallback, array(0,1))
end function

sub callback_notify(coord)
   col = coord(0)
   rig = coord(1)
   oCell = ThisComponent.Sheets(0).getCellByPosition(col, rig)
   oCell.SetString("Hello!")
end sub
OpenOffice 4.1.2/4.1.4 | LibreOffice 5.4.4/6.0
Win7 + LinuxMint
tomsor
Messaggi: 10
Iscritto il: sabato 11 agosto 2018, 20:33

Re: Calc: aggiornamento cella

Messaggio da tomsor »

Il suggerimento ha colto nel segno. In effetti quello che mi serviva era di passare a callback_notify più valori (e non solo un singolo numero o una singola stringa): l'oggetto array, che consente di assemblare in un'unica struttura un insieme di valori, per di più eterogenei (numeri e stringhe, ad esempio), risponde perfettamente allo scopo.
Metterò risolto a questo argomento (quando capirò come fare).
Grazie.
openoffice 4.1.5; windows 10
Rispondi