Pagina 1 di 1

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

Inviato: lunedì 15 ottobre 2018, 23:59
da giuserpe
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

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

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

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

Inviato: martedì 16 ottobre 2018, 2:07
da unlucky83
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....

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

Inviato: martedì 16 ottobre 2018, 8:45
da giuserpe
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.

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

Inviato: martedì 16 ottobre 2018, 9:40
da unlucky83
EsattoSono d’accordo. Forse Incide se é valuta, percentuale, numero... dovrebbero incidere anche gli zeri iniziali forse.

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

Inviato: mercoledì 17 ottobre 2018, 1:31
da giuserpe
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.

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

Inviato: giovedì 18 ottobre 2018, 0:41
da giuserpe
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

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.

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

Inviato: giovedì 18 ottobre 2018, 9:32
da unlucky83
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.

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

Inviato: giovedì 18 ottobre 2018, 13:04
da unlucky83
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.

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

Inviato: giovedì 18 ottobre 2018, 19:29
da giuserpe
Ottimo! Grazie per la puntualizzazione.