Pannello di Controllo Moderatore ]

[Risolto] Calc - Decidere numero decimali da stile di cella.

Creare una macro - Scrivere uno script - Usare le API

[Risolto] Calc - Decidere numero decimali da stile di cella.

Messaggioda giuserpe » lunedì 15 ottobre 2018, 23:59

Ciao,
ho necessità di settare il numero di decimali a secondo dello stile di cella utilizzato.
con l'ausilio di questa piccola funzione in Python, accedo alle proprietà degli stili di cella:
Codice: Seleziona tutto   Espandi visualeStringi visuale
def debug (arg=None):
    oDoc = XSCRIPTCONTEXT.getDocument()
    oDoc.StyleFamilies.getByName("CellStyles").getByName(stile_cella)

presumo che, per poter impostare il numero di decimali, si debba ricorrere al metodo .setPropertyValue secondo lo schema suggerito dall'inspector MRI che utilizzo:
Codice: Seleziona tutto   Espandi visualeStringi visuale
setPropertyValue(
   [in] string aPropertyName,
   [in] any aValue
)

ma qual è in nome della proprietà che mi consente di decidere l'approssimazione numerica?
Ancora meglio sarebbe capire come fare ad accedere all'elenco di tutti i nomi delle proprietà di questo oggetto. Chi sa darmi indicazioni?

Grazie
Ultima modifica di charlie il mercoledì 17 ottobre 2018, 8:15, modificato 2 volte in totale.
Motivazione: Aggiunta spunta verde
LibreOffice 6.* su Windows e Linux
Avatar utente
giuserpe
 
Messaggi: 105
Iscritto il: mercoledì 23 aprile 2014, 12:53

Re: Calc - Decidere numero decimali da stile di cella.

Messaggioda unlucky83 » martedì 16 ottobre 2018, 2:07

Forse ti è d'aiuto sapere che .PropertySetInfo.Properties ti restituisce un'array di tutte le proprietà da cui trovare i nomi e i valori.
La proprietà che cerchi si chiama NumberFormat, mi sembra sia l'unica a cambiare quando modifico nello stile di cella il numero di decimali.
E' di tipo LONG: quando i decimali sono impostati su standard vale 0, con zero cifre decimali 1, con una cifra decimale 105 , con due cifre decimali 2, con 3 cifre decimali 106....
LibO5.1.6.2-Ubuntu 16.04.2 32-bit
-
Se risolvi:
1. Condividi la soluzione qui con noi
2. Metti [Risolto] al titolo del primo messaggio
Avatar utente
unlucky83
Volontario
Volontario
 
Messaggi: 1965
Iscritto il: lunedì 7 gennaio 2013, 2:23
Località: Latina

Re: Calc - Decidere numero decimali da stile di cella.

Messaggioda giuserpe » martedì 16 ottobre 2018, 8:45

Grazie mille.
In effetti lavoravo già con NumberFormat, ma non riuscivo, e non riesco ancora, a capire la correlazione tra il suo valore ed il numero di decimali di approssimazione. Qui ho NumberFormat = 777 con 0 cifre decimali, NumberFormat = 158 con 1 decimale...
Sto lavorando su di uno stile personalizzato, quindi presumo che su questo valore incidano anche altri fattori.

Grazie ancora.
LibreOffice 6.* su Windows e Linux
Avatar utente
giuserpe
 
Messaggi: 105
Iscritto il: mercoledì 23 aprile 2014, 12:53

Re: Calc - Decidere numero decimali da stile di cella.

Messaggioda unlucky83 » martedì 16 ottobre 2018, 9:40

EsattoSono d’accordo. Forse Incide se é valuta, percentuale, numero... dovrebbero incidere anche gli zeri iniziali forse.
LibO5.1.6.2-Ubuntu 16.04.2 32-bit
-
Se risolvi:
1. Condividi la soluzione qui con noi
2. Metti [Risolto] al titolo del primo messaggio
Avatar utente
unlucky83
Volontario
Volontario
 
Messaggi: 1965
Iscritto il: lunedì 7 gennaio 2013, 2:23
Località: Latina

Re: [Risolto] Calc - Decidere numero decimali da stile di ce

Messaggioda giuserpe » mercoledì 17 ottobre 2018, 1:31

Ciao,
come mi ero proposto, ho recuperato i valori di NumberFormat dello stile di cella interessato al quale, di volta in volta, ho cambiato il numero dei decimali dalla GUI di LibreOffice.
Ho applicato così il valore che mi interessava al momento opportuno. Ho scoperto, però, che il risultato ottenuto poteva essere inatteso.
Approfondendo la questione sono arrivato alla conclusione che, per avere un NumberFormat valido, nella "misurazione" del suo valore bisogna tener conto anche del LocalSettings.
Non appena ne vengo a capo vi aggiorno.
LibreOffice 6.* su Windows e Linux
Avatar utente
giuserpe
 
Messaggi: 105
Iscritto il: mercoledì 23 aprile 2014, 12:53

Re: [Risolto] Calc - Decidere numero decimali da stile di ce

Messaggioda giuserpe » giovedì 18 ottobre 2018, 0:41

Ho trovato aiuto qui: https://forum.openoffice.org/en/forum/v ... =9&t=88846
quindi qui: https://wiki.openoffice.org/wiki/Docume ... _Documents
Ho adattato alle mie necessità così:
Codice: Seleziona tutto   Espandi visualeStringi visuale
def debug (arg=None):
    oDoc = XSCRIPTCONTEXT.getDocument()

    LocalSettings = uno.createUnoStruct("com.sun.star.lang.Locale")
    LocalSettings.Language = "it"
    LocalSettings.Country = "IT"

    NumberFormats = oDoc.NumberFormats
    NumberFormatString = "#.##0,00"
    NumberFormatId = NumberFormats.queryKey(NumberFormatString, LocalSettings, True)

    oSheet = oDoc.CurrentController.ActiveSheet
    if NumberFormatId == -1:
       NumberFormatId = NumberFormats.addNew(NumberFormatString, LocalSettings)
    oDoc.StyleFamilies.getByName("CellStyles").getByName(stile_cella).NumberFormat = NumberFormatId

Così riesco ad attribuire allo stile di cella il NumberFormatId ricavato al momento.
Notavo che questo valore, a parità di NumberFormatString e LocalSettings può cambiare da un file all'altro.
LibreOffice 6.* su Windows e Linux
Avatar utente
giuserpe
 
Messaggi: 105
Iscritto il: mercoledì 23 aprile 2014, 12:53

Re: [Risolto] Calc - Decidere numero decimali da stile di ce

Messaggioda unlucky83 » giovedì 18 ottobre 2018, 9:32

Ciao, sicuro che così funziona? Il NumberFormatsId sembra essere l’indice dell’oggetto struttura mentre il NumberFormat è un numero che in base al suo valore indica quali caratteristiche applicare.
LibO5.1.6.2-Ubuntu 16.04.2 32-bit
-
Se risolvi:
1. Condividi la soluzione qui con noi
2. Metti [Risolto] al titolo del primo messaggio
Avatar utente
unlucky83
Volontario
Volontario
 
Messaggi: 1965
Iscritto il: lunedì 7 gennaio 2013, 2:23
Località: Latina

Re: [Risolto] Calc - Decidere numero decimali da stile di ce

Messaggioda unlucky83 » giovedì 18 ottobre 2018, 13:04

A funzionare funziona. Che cambiando file può dare risultato diverso si spiega così:
in un file aggiungo 5 numberformat personalizzati, in un altro file aggiungo gli stessi numberformat ma in un ordine cronologico diverso. Le due liste risultano essere differenti nell'ordine e quindi gli id dello stesso numberformat personalizzato risultano essere diversi tra i due file.
Invece se i due file fossero generati dalla stessa versione di Libreoffice, presenterebbero la lista dei numberformat di default identica e l'id di questi non cambierebbe da un file ad un altro. In tal caso le differenze le vedresti solamente sui numberformat personalizzati. Oltretutto l'id viene assegnato automaticamente e se sequenziale come nei database, effettuando la rimozione e l'aggiunta di numberformat potresti ottenere liste di pari lunghezza ma con l'ultimo Id, oltre che ad indicare numberformat differenti, anche differenti in valore. Per chiarire, una lista di 10 voci, di cui 9 di default, potrebbe presentare come id 0,1,2,3,4,5,6,7,8,15 per il semplice fatto che sono stati aggiunti 7 numberformat personalizzati ma rimossi 6.
LibO5.1.6.2-Ubuntu 16.04.2 32-bit
-
Se risolvi:
1. Condividi la soluzione qui con noi
2. Metti [Risolto] al titolo del primo messaggio
Avatar utente
unlucky83
Volontario
Volontario
 
Messaggi: 1965
Iscritto il: lunedì 7 gennaio 2013, 2:23
Località: Latina

Re: [Risolto] Calc - Decidere numero decimali da stile di ce

Messaggioda giuserpe » giovedì 18 ottobre 2018, 19:29

Ottimo! Grazie per la puntualizzazione.
LibreOffice 6.* su Windows e Linux
Avatar utente
giuserpe
 
Messaggi: 105
Iscritto il: mercoledì 23 aprile 2014, 12:53


Torna a Macro e UNO API

Chi c’è in linea

Visitano il forum: Nessuno e 0 ospiti

cron