[Risolto] Formattazione numeri in MACRO

Discussioni sull'applicazione per i fogli di calcolo
Rispondi
Raoul Duke
Messaggi: 132
Iscritto il: giovedì 7 marzo 2019, 12:11

[Risolto] Formattazione numeri in MACRO

Messaggio da Raoul Duke »

Ebbene si, sono sempre io a rompere le scatole..
Vorrei poter definire se e quanti decimali deve avere un numero in una cella o se deve esser espresso in esponenziale (e anche in questo caso definire il numero di decimali.
in rete ho trovato solo questo codice

Codice: Seleziona tutto

doc=thiscomponent
Sheet = Doc.Sheets(0)
Cell = Sheet.getCellByPosition(0,1)
 
Cell.Value = 23423510.4523565
 
Dim NumberFormatId As Long
Dim LocalSettings As New com.sun.star.lang.Locale

NumberFormats = Doc.NumberFormats
NumberFormatString = "###0,00"

NumberFormatId = NumberFormats.queryKey(NumberFormatString, LocalSettings, True)
'If NumberFormatId = -1 Then
'   NumberFormatId = NumberFormats.addNew(NumberFormatString, LocalSettings)
'End If
 
' MsgBox NumberFormatId

Cell.NumberFormat = NumberFormatId
ora, a parte che non ho capito cosa sia il NumberFormatId, penso che la riga che determini il formato sia :

Codice: Seleziona tutto

NumberFormatString = "###0,00"
in quanto in questo modo mi mostra il numero con solo due decimali... mentre se scrivo "###0,000" me lo mostra con tre.
a parte queste due opzioni però tutte le altre non funzionano, ad esempio se scrivo "###0,0" non me lo mostra con un decimale solo, ma li mostra tutti e sette... inoltre non ho cmq capito come si può usare la notazione esponenziale.
Qualcuno se ne intende di sta roba?
Ultima modifica di Raoul Duke il sabato 4 maggio 2019, 13:12, modificato 1 volta in totale.
OpenOffice 4.1.5 con MacOS 10.13.6
patel
Volontario attivo
Volontario attivo
Messaggi: 4020
Iscritto il: venerdì 30 aprile 2010, 8:04
Località: Livorno

Re: Formattazione numeri in MACRO

Messaggio da patel »

per il formato scientifico prova

Codice: Seleziona tutto

Sub scientformat
Dim aLocale As New com.sun.star.lang.Locale
Doc = ThisComponent
Sheet = Doc.Sheets.getByName("Foglio1")
oFormats = Doc.NumberFormats
Sheet.getCellRangeByName("A3").NumberFormat = oFormats.getStandardFormat(32, aLocale)
End Sub
-------------------
Libre Office 7.5.3.2 su Windows 11
allega un file di esempio, guadagnerai tempo tu e lo farai risparmiare a chi ti aiuta
Gaetanopr
Volontario
Volontario
Messaggi: 3300
Iscritto il: mercoledì 21 novembre 2012, 20:07

Re: Formattazione numeri in MACRO

Messaggio da Gaetanopr »

oppure in questo modo

Codice: Seleziona tutto

doc=thiscomponent
Sheet = Doc.Sheets(0)
Cell = Sheet.getCellByPosition(0,15)

Cell.Value = 23423510.4523565

Cell.NumberFormat = 60
LibreOffice 7.2.2.2 windows 10
Openoffice 4.1.13 su windows 10
Raoul Duke
Messaggi: 132
Iscritto il: giovedì 7 marzo 2019, 12:11

Re: Formattazione numeri in MACRO

Messaggio da Raoul Duke »

grazie!
ho provato cell.numberformat=60 perchè mi sembrava piu snella e pare funzioni

Non so di dove siete, ma se passate per Roma avete una cena pagata :lol: :lol:

qualcuno invece sa qualcosa di come gestire i numeri dopo la virgola (non in notazione scientifica)?
OpenOffice 4.1.5 con MacOS 10.13.6
patel
Volontario attivo
Volontario attivo
Messaggi: 4020
Iscritto il: venerdì 30 aprile 2010, 8:04
Località: Livorno

Re: Formattazione numeri in MACRO

Messaggio da patel »

prova con questa sub

Codice: Seleziona tutto

sub decimalformat(n as integer, cell as object)
'  codici = Array(1,111,2,110,108,107,106) ' libreoffice da 0 a 6 decimali
  codici = Array(115,110,112,109,108,113,114) 'openoffice
  cell.NumberFormat = codici(n)
end sub
da utilizzare così

Codice: Seleziona tutto

Sub formatProva
Doc = ThisComponent
Sheet = Doc.Sheets(0)
cella = Sheet.getCellRangeByName("A1")
call decimalformat(2, cella) ' 2 decimali
End Sub
però la tua macro iniziale, con una piccola modifica mi funziona bene su LO

Codice: Seleziona tutto

sub decimal_format
doc=thiscomponent
Sheet = Doc.Sheets(0)
Cell = Sheet.getCellRangeByName("A3")

Cell.Value = 23423510.4523565

Dim NumberFormatId As Long
Dim LocalSettings As New com.sun.star.lang.Locale

NumberFormats = Doc.NumberFormats
NumberFormatString = "#,0"

NumberFormatId = NumberFormats.queryKey(NumberFormatString, LocalSettings, True)
If NumberFormatId = -1 Then
   NumberFormatId = NumberFormats.addNew(NumberFormatString, LocalSettings)
End If

Cell.NumberFormat = NumberFormatId
end sub
-------------------
Libre Office 7.5.3.2 su Windows 11
allega un file di esempio, guadagnerai tempo tu e lo farai risparmiare a chi ti aiuta
Raoul Duke
Messaggi: 132
Iscritto il: giovedì 7 marzo 2019, 12:11

Re: Formattazione numeri in MACRO

Messaggio da Raoul Duke »

Patel, non mi funziona il codice che mi hai mandato tu... non so perché...
Allegati
PROVA.ods
(14.51 KiB) Scaricato 95 volte
OpenOffice 4.1.5 con MacOS 10.13.6
patel
Volontario attivo
Volontario attivo
Messaggi: 4020
Iscritto il: venerdì 30 aprile 2010, 8:04
Località: Livorno

Re: Formattazione numeri in MACRO

Messaggio da patel »

la sub decimalformat non funziona se non le passi i parametri, infatti ho aggiunto anche l'esempio di come utilizzarla
patel ha scritto:prova con questa sub

Codice: Seleziona tutto

sub decimalformat(n as integer, cell as object)
'  codici = Array(1,111,2,110,108,107,106) ' libreoffice da 0 a 6 decimali
  codici = Array(115,110,112,109,108,113,114) 'openoffice
  cell.NumberFormat = codici(n)
end sub
da utilizzare così

Codice: Seleziona tutto

Sub formatProva
Doc = ThisComponent
Sheet = Doc.Sheets(0)
cella = Sheet.getCellRangeByName("A1")
call decimalformat(2, cella) ' 2 decimali
End Sub
-------------------
Libre Office 7.5.3.2 su Windows 11
allega un file di esempio, guadagnerai tempo tu e lo farai risparmiare a chi ti aiuta
Raoul Duke
Messaggi: 132
Iscritto il: giovedì 7 marzo 2019, 12:11

Re: Formattazione numeri in MACRO

Messaggio da Raoul Duke »

ma a me sembra di averli inseriti i parametri nel file che ti ho inviato!
se non è così puoi indicarmi il punto del codice dove li ho omessi? oppure modificare il file come pensi debba esser scritto?
grazie
OpenOffice 4.1.5 con MacOS 10.13.6
Gaetanopr
Volontario
Volontario
Messaggi: 3300
Iscritto il: mercoledì 21 novembre 2012, 20:07

Re: Formattazione numeri in MACRO

Messaggio da Gaetanopr »

Puoi fare in questo modo

Codice: Seleziona tutto

Sub Decimali
Doc = ThisComponent
Sheet = Doc.Sheets(0)
Sheet.getCellRangeByName("B15").NumberFormat = 2
end sub
LibreOffice 7.2.2.2 windows 10
Openoffice 4.1.13 su windows 10
patel
Volontario attivo
Volontario attivo
Messaggi: 4020
Iscritto il: venerdì 30 aprile 2010, 8:04
Località: Livorno

Re: Formattazione numeri in MACRO

Messaggio da patel »

modo semplicissimo, ma vale soltanto per 2 decimali
-------------------
Libre Office 7.5.3.2 su Windows 11
allega un file di esempio, guadagnerai tempo tu e lo farai risparmiare a chi ti aiuta
Gaetanopr
Volontario
Volontario
Messaggi: 3300
Iscritto il: mercoledì 21 novembre 2012, 20:07

Re: Formattazione numeri in MACRO

Messaggio da Gaetanopr »

Anche la sub decimalformat funziona solo per i 2 decimali, se vuoi cambiare il n di decimali devi indicare un parametro diverso dal 2, stessa cosa vale per come ho fatto io, basta cambiare il valore 2 con
1 = zero decimali, 103 = 1 decimale, 2 = 2 decimali, 104 = 3 dec, 105 = 4 dec, 106 = 5 dec, 107 = 6 dec
LibreOffice 7.2.2.2 windows 10
Openoffice 4.1.13 su windows 10
patel
Volontario attivo
Volontario attivo
Messaggi: 4020
Iscritto il: venerdì 30 aprile 2010, 8:04
Località: Livorno

Re: Formattazione numeri in MACRO

Messaggio da patel »

Raoul Duke ha scritto:ma a me sembra di averli inseriti i parametri nel file che ti ho inviato!
se non è così puoi indicarmi il punto del codice dove li ho omessi? oppure modificare il file come pensi debba esser scritto?
grazie
hai ragione, avevo visto male, prova con questa

Codice: Seleziona tutto

sub decimalformat(n as integer, cell as object)
'  codici = Array(123,121,2,125,122,126,127) ' libre da 0 a 6 decimali
  codici = Array(129,130,131,132,133,134,135) 'openoffice

  cell.NumberFormat = codici(n)
end sub
-------------------
Libre Office 7.5.3.2 su Windows 11
allega un file di esempio, guadagnerai tempo tu e lo farai risparmiare a chi ti aiuta
patel
Volontario attivo
Volontario attivo
Messaggi: 4020
Iscritto il: venerdì 30 aprile 2010, 8:04
Località: Livorno

Re: Formattazione numeri in MACRO

Messaggio da patel »

Gaetanopr ha scritto:Anche la sub decimalformat funziona solo per i 2 decimali, se vuoi cambiare il n di decimali devi indicare un parametro diverso dal 2, stessa cosa vale per come ho fatto io, basta cambiare il valore 2 con
1 = zero decimali, 103 = 1 decimale, 2 = 2 decimali, 104 = 3 dec, 105 = 4 dec, 106 = 5 dec, 107 = 6 dec
a me sembra che tutto dipenda dalla versione usata, a questo punto stiamo dando i numeri, conviene utilizzare questa

Codice: Seleziona tutto

sub decimal_format
doc=thiscomponent
Sheet = Doc.Sheets(0)
Cell = Sheet.getCellRangeByName("A10")
Cell.Value = 0.23423510
Dim NumberFormatId As Long
Dim LocalSettings As New com.sun.star.lang.Locale
NumberFormats = Doc.NumberFormats
NumberFormatString = "0,0000" ' da modificare in base ai decimali desiderati
NumberFormatId = NumberFormats.queryKey(NumberFormatString, LocalSettings, True)
If NumberFormatId = -1 Then
   NumberFormatId = NumberFormats.addNew(NumberFormatString, LocalSettings)
End If
Cell.NumberFormat = NumberFormatId
end sub
Ultima modifica di patel il sabato 4 maggio 2019, 12:28, modificato 1 volta in totale.
-------------------
Libre Office 7.5.3.2 su Windows 11
allega un file di esempio, guadagnerai tempo tu e lo farai risparmiare a chi ti aiuta
Gaetanopr
Volontario
Volontario
Messaggi: 3300
Iscritto il: mercoledì 21 novembre 2012, 20:07

Re: Formattazione numeri in MACRO

Messaggio da Gaetanopr »

patel ha scritto:a questo punto stiamo dando i numeri
:D
In questo modo basta inserire il codice numerico in formato stringa non preoccupandoti di conoscerne il codice ma soprattutto vale per tutte le versioni, però io toglierei il segnaposto cancelletto # altrimenti vengono inseriti tanti zeri iniziali quanti sono i numeri mancanti al formato impostato.
Esempio

Codice: Seleziona tutto

NumberFormatString = "0#,00" 
se inserisci 5,25311 visualizzi 05,25
Se togli il # quindi

Codice: Seleziona tutto

NumberFormatString = "0,00"
se inserisci 5,25311 visualizzi 5,25

Non so se mi sono spiegato bene
LibreOffice 7.2.2.2 windows 10
Openoffice 4.1.13 su windows 10
patel
Volontario attivo
Volontario attivo
Messaggi: 4020
Iscritto il: venerdì 30 aprile 2010, 8:04
Località: Livorno

Re: Formattazione numeri in MACRO

Messaggio da patel »

sono d'accordo, in pratica torniamo alla sub iniziale proposta da Roul che però non gli funzionava
-------------------
Libre Office 7.5.3.2 su Windows 11
allega un file di esempio, guadagnerai tempo tu e lo farai risparmiare a chi ti aiuta
Gaetanopr
Volontario
Volontario
Messaggi: 3300
Iscritto il: mercoledì 21 novembre 2012, 20:07

Re: Formattazione numeri in MACRO

Messaggio da Gaetanopr »

Trasformerei la sub in una function da poter usare all'occorrenza senza ogni volta dover ricopiare la macro

Codice: Seleziona tutto

Sub Prova
ThisComponent.Sheets(0).getCellRangeByName("A1").NumberFormat = decimal_format("0,00")

End Sub

Function decimal_format(Formato)
doc=thiscomponent
Dim NumberFormatId As Long
Dim LocalSettings As New com.sun.star.lang.Locale
NumberFormats = Doc.NumberFormats
NumberFormatString = Formato 
NumberFormatId = NumberFormats.queryKey(NumberFormatString, LocalSettings, True)
If NumberFormatId = -1 Then
   NumberFormatId = NumberFormats.addNew(NumberFormatString, LocalSettings)
End If
decimal_format = NumberFormatId
end Function
LibreOffice 7.2.2.2 windows 10
Openoffice 4.1.13 su windows 10
patel
Volontario attivo
Volontario attivo
Messaggi: 4020
Iscritto il: venerdì 30 aprile 2010, 8:04
Località: Livorno

Re: Formattazione numeri in MACRO

Messaggio da patel »

E' stato più complicato del previsto, ma direi che ora abbiamo risolto a meno di sorprese sul MAC
-------------------
Libre Office 7.5.3.2 su Windows 11
allega un file di esempio, guadagnerai tempo tu e lo farai risparmiare a chi ti aiuta
Raoul Duke
Messaggi: 132
Iscritto il: giovedì 7 marzo 2019, 12:11

Re: Formattazione numeri in MACRO

Messaggio da Raoul Duke »

grazie, mi sembra che funzioni magnificamente...
non sono molto pratico di function e volevo sapere: se in un doc ho più moduli questa funcion la devo scrivere alla fine di tutti i moduli che utilizzano number_format=decimal_format ("0,00")? oppure basta in un modulo solo qualsiasi?
OpenOffice 4.1.5 con MacOS 10.13.6
Gaetanopr
Volontario
Volontario
Messaggi: 3300
Iscritto il: mercoledì 21 novembre 2012, 20:07

Re: Formattazione numeri in MACRO

Messaggio da Gaetanopr »

Basta inserirla in un solo modulo, io solitamente creo un modulo chiamato Funzioni dove metto tutte le funzioni che mi servono
LibreOffice 7.2.2.2 windows 10
Openoffice 4.1.13 su windows 10
Raoul Duke
Messaggi: 132
Iscritto il: giovedì 7 marzo 2019, 12:11

Re: Formattazione numeri in MACRO

Messaggio da Raoul Duke »

grazie!!! :D
OpenOffice 4.1.5 con MacOS 10.13.6
Gaetanopr
Volontario
Volontario
Messaggi: 3300
Iscritto il: mercoledì 21 novembre 2012, 20:07

Re: [Risolto] Formattazione numeri in MACRO

Messaggio da Gaetanopr »

E' stato un lavoro di squadra :D
LibreOffice 7.2.2.2 windows 10
Openoffice 4.1.13 su windows 10
Rispondi