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

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

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

Messaggio 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
Ultima modifica di charlie il mercoledì 17 ottobre 2018, 8:15, modificato 2 volte in totale.
Motivazione: Aggiunta spunta verde
LibreOffice fresh su Windows e Linux
Avatar utente
unlucky83
Volontario
Volontario
Messaggi: 2355
Iscritto il: lunedì 7 gennaio 2013, 1:23
Località: Latina

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

Messaggio 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....
LibO:Versione: 6.2.8.2
Build ID: 1:6.2.8~rc2-0ubuntu0.16.04.1- 32-bit
-
Se risolvi:
1. Condividi la soluzione qui con noi
2. Metti [Risolto] al titolo del primo messaggio come spiegato qui
Avatar utente
giuserpe
Messaggi: 127
Iscritto il: mercoledì 23 aprile 2014, 12:53

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

Messaggio 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.
LibreOffice fresh su Windows e Linux
Avatar utente
unlucky83
Volontario
Volontario
Messaggi: 2355
Iscritto il: lunedì 7 gennaio 2013, 1:23
Località: Latina

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

Messaggio da unlucky83 »

EsattoSono d’accordo. Forse Incide se é valuta, percentuale, numero... dovrebbero incidere anche gli zeri iniziali forse.
LibO:Versione: 6.2.8.2
Build ID: 1:6.2.8~rc2-0ubuntu0.16.04.1- 32-bit
-
Se risolvi:
1. Condividi la soluzione qui con noi
2. Metti [Risolto] al titolo del primo messaggio come spiegato qui
Avatar utente
giuserpe
Messaggi: 127
Iscritto il: mercoledì 23 aprile 2014, 12:53

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

Messaggio 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.
LibreOffice fresh su Windows e Linux
Avatar utente
giuserpe
Messaggi: 127
Iscritto il: mercoledì 23 aprile 2014, 12:53

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

Messaggio 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.
LibreOffice fresh su Windows e Linux
Avatar utente
unlucky83
Volontario
Volontario
Messaggi: 2355
Iscritto il: lunedì 7 gennaio 2013, 1:23
Località: Latina

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

Messaggio 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.
LibO:Versione: 6.2.8.2
Build ID: 1:6.2.8~rc2-0ubuntu0.16.04.1- 32-bit
-
Se risolvi:
1. Condividi la soluzione qui con noi
2. Metti [Risolto] al titolo del primo messaggio come spiegato qui
Avatar utente
unlucky83
Volontario
Volontario
Messaggi: 2355
Iscritto il: lunedì 7 gennaio 2013, 1:23
Località: Latina

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

Messaggio 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.
LibO:Versione: 6.2.8.2
Build ID: 1:6.2.8~rc2-0ubuntu0.16.04.1- 32-bit
-
Se risolvi:
1. Condividi la soluzione qui con noi
2. Metti [Risolto] al titolo del primo messaggio come spiegato qui
Avatar utente
giuserpe
Messaggi: 127
Iscritto il: mercoledì 23 aprile 2014, 12:53

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

Messaggio da giuserpe »

Ottimo! Grazie per la puntualizzazione.
LibreOffice fresh su Windows e Linux
Rispondi