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.
[RISOLTO] Calc: aggiornamento cella
[RISOLTO] Calc: aggiornamento cella
Ultima modifica di tomsor il mercoledì 29 agosto 2018, 17:11, modificato 1 volta in totale.
openoffice 4.1.5; windows 10
-
- Volontario
- Messaggi: 164
- Iscritto il: venerdì 9 giugno 2017, 13:48
Re: Calc: aggiornamento cella
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:
Saluti.
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
OpenOffice 4.1.2/4.1.4 | LibreOffice 5.4.4/6.0
Win7 + LinuxMint
Win7 + LinuxMint
Re: Calc: aggiornamento cella
Proverò e studierò gli spunti che mi ha dato. Grazie.
openoffice 4.1.5; windows 10
Re: Calc: aggiornamento cella
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.
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
-
- Volontario
- Messaggi: 164
- Iscritto il: venerdì 9 giugno 2017, 13:48
Re: Calc: aggiornamento cella
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
Win7 + LinuxMint
Re: Calc: aggiornamento cella
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.
Metterò risolto a questo argomento (quando capirò come fare).
Grazie.
openoffice 4.1.5; windows 10