[Risolto] Evento o funzione timer

Creare una macro - Scrivere uno script - Usare le API
Rispondi
denis_dandrea
Messaggi: 3
Iscritto il: martedì 8 febbraio 2011, 10:09

[Risolto] Evento o funzione timer

Messaggio da denis_dandrea »

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.
Ultima modifica di denis_dandrea il martedì 15 febbraio 2011, 8:26, modificato 1 volta in totale.
OOo 3.2 - Win XP
vladko
Messaggi: 1637
Iscritto il: martedì 3 agosto 2010, 8:02

Re: Evento o funzione timer

Messaggio da vladko »

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??
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 :-)
denis_dandrea
Messaggi: 3
Iscritto il: martedì 8 febbraio 2011, 10:09

Re: Evento o funzione timer

Messaggio da denis_dandrea »

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.
OOo 3.2 - Win XP
Avatar utente
xergio
Messaggi: 315
Iscritto il: lunedì 15 marzo 2010, 21:54
Località: Arzignano (Vicenza)
Contatta:

Re: Evento o funzione timer

Messaggio da xergio »

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).

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
Avatar utente
FncZ4pp4
Messaggi: 285
Iscritto il: domenica 2 gennaio 2011, 20:32

Re: Evento o funzione timer

Messaggio da FncZ4pp4 »

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
Avatar utente
xergio
Messaggi: 315
Iscritto il: lunedì 15 marzo 2010, 21:54
Località: Arzignano (Vicenza)
Contatta:

Re: Evento o funzione timer

Messaggio da xergio »

Non modale? Posta pure il tuo esempio, sarà gradito. :D
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
Avatar utente
FncZ4pp4
Messaggi: 285
Iscritto il: domenica 2 gennaio 2011, 20:32

Re: Evento o funzione timer

Messaggio da FncZ4pp4 »

xergio ha scritto:Non modale? Posta pure il tuo esempio, sarà gradito. :D
Non ho capito cosa intendi per Modale. comunque il file non me lo ritrovo più, ma ho rifatto la macro.
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. :lol:
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
denis_dandrea
Messaggi: 3
Iscritto il: martedì 8 febbraio 2011, 10:09

Re: Evento o funzione timer

Messaggio da denis_dandrea »

FncZ4pp4 ha scritto: Non ho capito cosa intendi per Modale.
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. :)

Molto gentili

Denis
OOo 3.2 - Win XP
Rispondi