[Risolto] Array di Formule diverse in un range di celle

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

[Risolto] Array di Formule diverse in un range di celle

Messaggio da giuserpe »

Ciao,
premetto che si tratta di codice Python (pyuno), ma di facilissima lettura.
Ho la necessità di riempire un range di celle con un set di formule in questo modo:

Codice: Seleziona tutto

def debug (arg=None):
    oDoc = XSCRIPTCONTEXT.getDocument()
    lista_analisi = list()
    oSheet = oDoc.getSheets().getByName('Analisi di prezzo')
    voce = list()
    idx = 4
    for n in range (0, ultima_voce(oSheet)+1):
        if oSheet.getCellByPosition(0, n).CellStyle == 'An-1_sigla' and oSheet.getCellByPosition(1, n).String != '<<<Scrivi la descrizione della nuova voce da analizzare   ':
            voce = (oSheet.getCellByPosition(0, n).String,
                "=$'Analisi di Prezzo'.B" + str(n+1),
                "=$'Analisi di Prezzo'.C" + str(n+1),
                "=$'Analisi di Prezzo'.K" + str(n+1),
                "=$'Analisi di Prezzo'.G" + str(n+1),
                "=$'Analisi di Prezzo'.I" + str(n+1),
                "=F"+ str(idx)+"*E"+ str(idx),
                "=$'Analisi di Prezzo'.A" + str(n+1),
            )
            lista_analisi.append(voce)
            idx += 1
    oSheet = oDoc.getSheets().getByName('Elenco Prezzi')
    oSheet.getRows().insertByIndex(3,len(lista_analisi))
    oRange = oSheet.getCellRangeByPosition(0, 3, 7, 3+len(lista_analisi)-1)
    lista_come_array = tuple(lista_analisi)
    oRange.setDataArray(lista_come_array)
La procedura va a buon fine, ma l'esito non è quello desiderato. In pratica il contenuto finale delle celle è di tipo String, e cioè, le celle contengono le formule giuste, ma queste non vengono interpretate come tali.
Qualcuno sa darmi una dritta?
Ultima modifica di giuserpe il martedì 31 gennaio 2017, 8:23, modificato 1 volta in totale.
LibreOffice fresh su Windows e Linux
Avatar utente
giuserpe
Messaggi: 127
Iscritto il: mercoledì 23 aprile 2014, 12:53

Re: Array di Formule diverse in un range di celle

Messaggio da giuserpe »

Intanto ho rimediato così:

Codice: Seleziona tutto

    for y in range(3, 3+len(lista_analisi)):
        for x in range(0, 8):
            oSheet.getCellByPosition(x, y).Formula = oSheet.getCellByPosition(x, y).String
In pratica rileggo come .String e riscrivo come .Formula tutto il range in cascata.
E' un ripiego, anche se abbastanza veloce, ma sarebbe più interessante risolvere alla fonte.
LibreOffice fresh su Windows e Linux
Gaetanopr
Volontario
Volontario
Messaggi: 3291
Iscritto il: mercoledì 21 novembre 2012, 20:07

Re: Array di Formule diverse in un range di celle

Messaggio da Gaetanopr »

L'errore è nel metodo utilizzato

Codice: Seleziona tutto

oRange.setDataArray(lista_come_array)
per inserire formule in un range devi usare il metodo

Codice: Seleziona tutto

oRange.setFormulaArray(lista_come_array)
LibreOffice 7.2.2.2 windows 10
Openoffice 4.1.13 su windows 10
Avatar utente
giuserpe
Messaggi: 127
Iscritto il: mercoledì 23 aprile 2014, 12:53

Re: Array di Formule diverse in un range di celle

Messaggio da giuserpe »

Sì, così è perfetto.
Grazie.
LibreOffice fresh su Windows e Linux
Rispondi