Pannello di Controllo Moderatore ]

[RISOLTO] Calc: aggiornamento cella

Creare una macro - Scrivere uno script - Usare le API

[RISOLTO] Calc: aggiornamento cella

Messaggioda tomsor » lunedì 27 agosto 2018, 20:44

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
tomsor
 
Messaggi: 10
Iscritto il: sabato 11 agosto 2018, 20:33

Re: Calc: aggiornamento cella

Messaggioda hubert lambert » martedì 28 agosto 2018, 13:37

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   Espandi visualeStringi visuale
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
hubert lambert
Volontario
Volontario
 
Messaggi: 144
Iscritto il: venerdì 9 giugno 2017, 13:48

Re: Calc: aggiornamento cella

Messaggioda tomsor » martedì 28 agosto 2018, 13:58

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

Messaggioda tomsor » martedì 28 agosto 2018, 20:46

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
tomsor
 
Messaggi: 10
Iscritto il: sabato 11 agosto 2018, 20:33

Re: Calc: aggiornamento cella

Messaggioda hubert lambert » martedì 28 agosto 2018, 21:02

Non sono certo di bene capire, ma prova con questa variante:
Codice: Seleziona tutto   Espandi visualeStringi visuale
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
hubert lambert
Volontario
Volontario
 
Messaggi: 144
Iscritto il: venerdì 9 giugno 2017, 13:48

Re: Calc: aggiornamento cella

Messaggioda tomsor » mercoledì 29 agosto 2018, 17:06

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
tomsor
 
Messaggi: 10
Iscritto il: sabato 11 agosto 2018, 20:33


Torna a Macro e UNO API

Chi c’è in linea

Visitano il forum: Nessuno e 1 ospite