[Risolto] Evento o funzione timer
-
denis_dandrea
- Messaggi: 3
- Iscritto il: martedì 8 febbraio 2011, 10:09
[Risolto] Evento o funzione timer
Salve. Devo far effettuare il salvataggio di un foglio Calc ogni x minuti. Esiste un evento tipo timer per far eseguire azioni a intervalli (o orari) predefiniti? In alternativa una sub per sospendere una macro (e solo quella) per un periodo determinato?
Io ho provato queste due strade ma sono risultate fallimentari:
A) WAIT: in effetti ferma la macro ma purtroppo anche tutte le altre. In pratica congela Basic e fra l'altro rallenta pesantemente Calc.
B) Assegnare la macro di salvataggio all'evento "Lo stato 'modificato' è cambiato". Questo funziona ma salva il documento ad ogni modifica. Se devo modificare 3 celle salvo 3 volte e ci metto una vita..
C) Combinazione di B e A. Ovvero associo la macro all'evento "Lo stato 'modificato' è cambiato" e nella macro inserisco un Wait di alcuni secondi (per permettere di fare + modifiche). Risultato nonostante il cursore selezioni celle diverse, continuo a scrivere sempre nella prima cella in quanto Wait mi ha congelato l'ambiente...
Grazie per ogni aiuto.
Io ho provato queste due strade ma sono risultate fallimentari:
A) WAIT: in effetti ferma la macro ma purtroppo anche tutte le altre. In pratica congela Basic e fra l'altro rallenta pesantemente Calc.
B) Assegnare la macro di salvataggio all'evento "Lo stato 'modificato' è cambiato". Questo funziona ma salva il documento ad ogni modifica. Se devo modificare 3 celle salvo 3 volte e ci metto una vita..
C) Combinazione di B e A. Ovvero associo la macro all'evento "Lo stato 'modificato' è cambiato" e nella macro inserisco un Wait di alcuni secondi (per permettere di fare + modifiche). Risultato nonostante il cursore selezioni celle diverse, continuo a scrivere sempre nella prima cella in quanto Wait mi ha congelato l'ambiente...
Grazie per ogni aiuto.
Ultima modifica di denis_dandrea il martedì 15 febbraio 2011, 8:26, modificato 1 volta in totale.
OOo 3.2 - Win XP
Re: Evento o funzione timer
forse che io non capisco ma non è sufficente impostare tempo su Opzioni-carica/salva-Generale "Salva informazioni di ripristino automatico ogni"
e magari aggiungere fa sempre copia backup??
e magari aggiungere fa sempre copia backup??
AOO 3.4.1 AOO341m1(Build:9593) Linux Mint Debian/Mate 64bit java 1.6.0.22 XP PRO/32bit
con Base --> sempre backup!!!
Se problema è Risolto --> Inserire [Risolto]nel titolo come spiega qui, grazie
con Base --> sempre backup!!!
Se problema è Risolto --> Inserire [Risolto]nel titolo come spiega qui, grazie
-
denis_dandrea
- Messaggi: 3
- Iscritto il: martedì 8 febbraio 2011, 10:09
Re: Evento o funzione timer
Purtroppo no nel mio caso. Ho il problema che il file sarà utilizzato da utenti con conoscenze meno che minimali. In caso di chiusura senza salvataggio (es. caduta di tensione), al riavvio inizia la procedura di ripristino e gli utenti non sono in grado di gestirla. Devo quindi disabilitare il ripristino. L'utente è solo in grado di aprire un collegamento sul desktop e scrivere i dati nelle celle.
Grazie comunque.
Grazie comunque.
OOo 3.2 - Win XP
- xergio
- Messaggi: 315
- Iscritto il: lunedì 15 marzo 2010, 21:54
- Località: Arzignano (Vicenza)
- Contatta:
Re: Evento o funzione timer
Una funzione di timer non la puoi creare con il Basic, ma con Python sì.
La devi copiare nella cartella utente del pc (tipo - in Ubuntu - /home/nome-utente/.openoffice.org/3/user/Scripts/python ). Se non ci fosse la sottocartella python, creala.
Quindi collega la macro all'evento "apri documento" (la trovi sotto le macro, nella cartella "autosave" con il nome "save" : il salvataggio, se la lasci come scritta, viene fatto ogni 5 minuti (60 secondi * 5).
La devi copiare nella cartella utente del pc (tipo - in Ubuntu - /home/nome-utente/.openoffice.org/3/user/Scripts/python ). Se non ci fosse la sottocartella python, creala.
Quindi collega la macro all'evento "apri documento" (la trovi sotto le macro, nella cartella "autosave" con il nome "save" : il salvataggio, se la lasci come scritta, viene fatto ogni 5 minuti (60 secondi * 5).
Codice: Seleziona tutto
import threading, time
model = XSCRIPTCONTEXT.getDocument()
class tsave(threading.Thread):
def __init__ (self):
threading.Thread.__init__(self)
def run(self):
while True:
time.sleep(60*5)
model.store()
def save(self):
utsave = tsave()
utsave.start()Per cortesia, inserisci [Risolto] nel Titolo iniziale se il tuo problema è stato risolto.
---
Sergio Corato
LibO 6.x su Ubuntu 18.04 / OOo 4.x su Windows XP/10 (VirtualBox)
https://efatto.it
---
Sergio Corato
LibO 6.x su Ubuntu 18.04 / OOo 4.x su Windows XP/10 (VirtualBox)
https://efatto.it
Re: Evento o funzione timer
Si che si può creare una funzione timer con il basic, io l'avevo fatta ma la utilizzavo semplicemente come orologio e non per fare salvataggi.
Per cortesia, inserisci [Risolto] nel Titolo iniziale se il tuo problema è stato risolto.
-
OpenOffice 3.3 su Windows XP
-
OpenOffice 3.3 su Windows XP
- xergio
- Messaggi: 315
- Iscritto il: lunedì 15 marzo 2010, 21:54
- Località: Arzignano (Vicenza)
- Contatta:
Re: Evento o funzione timer
Non modale? Posta pure il tuo esempio, sarà gradito. 
Per cortesia, inserisci [Risolto] nel Titolo iniziale se il tuo problema è stato risolto.
---
Sergio Corato
LibO 6.x su Ubuntu 18.04 / OOo 4.x su Windows XP/10 (VirtualBox)
https://efatto.it
---
Sergio Corato
LibO 6.x su Ubuntu 18.04 / OOo 4.x su Windows XP/10 (VirtualBox)
https://efatto.it
Re: Evento o funzione timer
Non ho capito cosa intendi per Modale. comunque il file non me lo ritrovo più, ma ho rifatto la macro.xergio ha scritto:Non modale? Posta pure il tuo esempio, sarà gradito.
Nell'esempio allegeto gestisco l'ora prendendo il suo valore numerico e assegnandola a time2, poi faccio un loop che faccio girare sempre finche time che è sempre aggiornato dalla cella A1 è minore di time2 (che è rimasto al vecchio orario prima di entrare nel loop della funzione WHILE) + 0.000694444444444444 che è la corrispondenza numerica interna di 1 minuto di tempo.
Quando la condizione WHILE non è più vera, allora esce dal loop e va a scrivere l'orario corrispondente nella cella C1 ad intervalli regolari di 1 minuto (fateci caso), e poi c'è una messaggio che informa che è passato 1 minuto. E il ciclo si ripete all'infinito. Nella parte di macro dove genera il messaggio ci si può far partire una procedura che salva il documento ad intervalli regolari. Notate anche nella cella B2 il corrispettivo valore numerico dell'ora attuale come incrementa all'avanzare i secondi.
L'intervallo da impostare lo si può impostare moltiplicando 0.000694444444444444 per n minuti oppure dividerlo per ottenere intervalli in secondi e che questo valore può essere preso da una cella nel foglio con il metodo GetValue() in modo da modificarlo in qualsiasi momento senza interrompere la macro. Se bisogna eseguire altre Subroutine nella macro, al termine di ogni Subroutine si richiama la Subroutine del timer per riprendere il conteggio del timer.
L'allegato è disponibile come esempio per chi serve e per chi non credeva.
- Allegati
-
- timer.ods
- (9.57 KiB) Scaricato 523 volte
Per cortesia, inserisci [Risolto] nel Titolo iniziale se il tuo problema è stato risolto.
-
OpenOffice 3.3 su Windows XP
-
OpenOffice 3.3 su Windows XP
-
denis_dandrea
- Messaggi: 3
- Iscritto il: martedì 8 febbraio 2011, 10:09
Re: Evento o funzione timer
Grazie a tutti. Gli esempi proposti funzionano. Utilizzavo anch'io la funzione wait in un ciclo while ma mi bloccava tutto probabilmente perchè il tempo è lungo (svariati secondi) mentre qui si sblocca abbastanza spesso da permettere l'esecuzione di altre macro. Probabilmente non è un vero Modale ma abbastanza almeno per i miei scopi.FncZ4pp4 ha scritto: Non ho capito cosa intendi per Modale.
Molto gentili
Denis
OOo 3.2 - Win XP