[Risolto] Controllare il refresh automatico di Calc con Python.

Creare una macro - Scrivere uno script - Usare le API
Rispondi
Avatar utente
giuserpe
Messaggi: 127
Iscritto il: mercoledì 23 aprile 2014, 12:53

[Risolto] Controllare il refresh automatico di Calc con Python.

Messaggio da giuserpe »

Ho necessità di governare il refresh dei documenti Calc.
Ho questo codice:

Codice: Seleziona tutto

def DocumentRefresh(boo):
    oDoc = XSCRIPTCONTEXT.getDocument()
    if boo == True:
        oDoc.enableAutomaticCalculation(True)
        oDoc.unlockControllers()
        oDoc.calculateAll()
        # ~oDoc.removeActionLock()
        oDoc.resetActionLocks()

    elif boo == False:
        oDoc.enableAutomaticCalculation(False)
        oDoc.lockControllers()
        # ~oDoc.addActionLock()  
Di volta in volta metto all'inizio delle mie macro DocumentRefresh(False) e poi, a chiusura, DocumentRefresh(True).
Non sempre, però, la riattivazione del refresh va a buon fine e il documento rimane in freeze. Come risultato non mi mostra nemmeno eventuali nuovi valori che inserisco nelle celle. Per visualizzarli tocca cambiare lo zoom.
Mi tocca ogni volta chiudere e riaprire LibreOffice per tornare alla normalità.
Qualcuno sa darmi una dritta?
Ultima modifica di charlie il venerdì 6 gennaio 2023, 18:24, modificato 2 volte in totale.
Motivazione: Aggiunta ✔ verde.
LibreOffice fresh su Windows e Linux
Avatar utente
giuserpe
Messaggi: 127
Iscritto il: mercoledì 23 aprile 2014, 12:53

[RISOLTO] Controllare il refresh automatico di Calc con Python.

Messaggio da giuserpe »

Forse ci siamo...

Codice: Seleziona tutto

def DocumentRefresh(boo):
    oDoc = XSCRIPTCONTEXT.getDocument()
    # l'ordine che segue non va cambiato!!!
    if boo == True:
        oDoc.IsAdjustHeightEnabled = True
        oDoc.enableAutomaticCalculation(True)
        oDoc.removeActionLock()
        oDoc.resetActionLocks()
        oDoc.unlockControllers()
        oDoc.calculateAll()

    elif boo == False:
        oDoc.IsAdjustHeightEnabled = False
        oDoc.enableAutomaticCalculation(False)
        oDoc.lockControllers #disattiva l'eco a schermo
        oDoc.addActionLock()
Così gestisco anche il ricalcolo dell'altezza celle.
LibreOffice fresh su Windows e Linux
nickGiard
Messaggi: 82
Iscritto il: lunedì 14 maggio 2012, 22:04

Re: [Risolto] Controllare il refresh automatico di Calc con Python.

Messaggio da nickGiard »

Ciao Giuserpe, grazie per la condivisione del codice, la gestione dei refresh mi è sempre risultata oscura.
So che sei un esperto programmatore nel campo dei Computi Metrici, anche in Python. Ti chiedo che valori può assumere il parametro boo, se solo booleano il controllo potrebbe essere : if boo: ... else: ..... (sicuramente molto meno didattico)
Nicola con LibreOffice 7.1 (x64) su Windows 11
Avatar utente
giuserpe
Messaggi: 127
Iscritto il: mercoledì 23 aprile 2014, 12:53

Re: [Risolto] Controllare il refresh automatico di Calc con Python.

Messaggio da giuserpe »

Ciao nickGiard. In effetti può essere scritto così:

Codice: Seleziona tutto

def DocumentRefresh(boo):
    oDoc = XSCRIPTCONTEXT.getDocument()
    # l'ordine che segue non va cambiato!!!
    if boo == True:
        oDoc.IsAdjustHeightEnabled = True
        oDoc.enableAutomaticCalculation(True)
        oDoc.removeActionLock()
        oDoc.resetActionLocks()
        oDoc.unlockControllers()
        oDoc.calculateAll()

    else:
        oDoc.IsAdjustHeightEnabled = False
        oDoc.enableAutomaticCalculation(False)
        oDoc.lockControllers #disattiva l'eco a schermo
        oDoc.addActionLock()
Il risultato è lo stesso. Hai ragione, elif è preferibile usarlo quando hai più alternative ad if. Ma sai, magari ci sono arrivato di notte, ero stanco e mi sembrava più "sicuro".
Voglio precisare che non sono un esperto programmatore; al massimo un grande esperto del copia e incolla.
Buon anno.
LibreOffice fresh su Windows e Linux
Rispondi