Pagina 1 di 1

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

Inviato: mercoledì 9 novembre 2022, 12:34
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?

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

Inviato: venerdì 2 dicembre 2022, 17:34
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.

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

Inviato: lunedì 2 gennaio 2023, 22:00
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)

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

Inviato: lunedì 2 gennaio 2023, 22:13
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.