Pannello di Controllo Moderatore ]

[Risolto] Formattazione numeri in MACRO

Discussioni sull'applicazione per i fogli di calcolo

[Risolto] Formattazione numeri in MACRO

Messaggioda Raoul Duke » martedì 30 aprile 2019, 16:03

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   Espandi visualeStringi visuale
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   Espandi visualeStringi visuale
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
Raoul Duke
 
Messaggi: 113
Iscritto il: giovedì 7 marzo 2019, 13:11

Re: Formattazione numeri in MACRO

Messaggioda patel » martedì 30 aprile 2019, 17:26

per il formato scientifico prova
Codice: Seleziona tutto   Espandi visualeStringi visuale
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
-------------------
OpenOffice 4.1 e Libre Office 6.o.7.3 su Windows 10
allega un file di esempio, guadagnerai tempo tu e lo farai risparmiare a chi ti aiuta
patel
Volontario attivo
Volontario attivo
 
Messaggi: 3291
Iscritto il: venerdì 30 aprile 2010, 8:04
Località: Livorno

Re: Formattazione numeri in MACRO

Messaggioda Gaetanopr » martedì 30 aprile 2019, 17:36

oppure in questo modo
Codice: Seleziona tutto   Espandi visualeStringi visuale
doc=thiscomponent
Sheet = Doc.Sheets(0)
Cell = Sheet.getCellByPosition(0,15)

Cell.Value = 23423510.4523565

Cell.NumberFormat = 60
Openoffice 4.1 su windows xp
Gaetanopr
Volontario
Volontario
 
Messaggi: 2722
Iscritto il: mercoledì 21 novembre 2012, 21:07

Re: Formattazione numeri in MACRO

Messaggioda Raoul Duke » martedì 30 aprile 2019, 19:12

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
Raoul Duke
 
Messaggi: 113
Iscritto il: giovedì 7 marzo 2019, 13:11

Re: Formattazione numeri in MACRO

Messaggioda patel » mercoledì 1 maggio 2019, 10:42

prova con questa sub

Codice: Seleziona tutto   Espandi visualeStringi visuale
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   Espandi visualeStringi visuale
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   Espandi visualeStringi visuale
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
-------------------
OpenOffice 4.1 e Libre Office 6.o.7.3 su Windows 10
allega un file di esempio, guadagnerai tempo tu e lo farai risparmiare a chi ti aiuta
patel
Volontario attivo
Volontario attivo
 
Messaggi: 3291
Iscritto il: venerdì 30 aprile 2010, 8:04
Località: Livorno

Re: Formattazione numeri in MACRO

Messaggioda Raoul Duke » venerdì 3 maggio 2019, 14:01

Patel, non mi funziona il codice che mi hai mandato tu... non so perché...
Allegati
PROVA.ods
(14.51 KiB) Scaricato 19 volte
OpenOffice 4.1.5 con MacOS 10.13.6
Raoul Duke
 
Messaggi: 113
Iscritto il: giovedì 7 marzo 2019, 13:11

Re: Formattazione numeri in MACRO

Messaggioda patel » venerdì 3 maggio 2019, 15:33

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   Espandi visualeStringi visuale
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   Espandi visualeStringi visuale
Sub formatProva
Doc = ThisComponent
Sheet = Doc.Sheets(0)
cella = Sheet.getCellRangeByName("A1")
call decimalformat(2, cella) ' 2 decimali
End Sub

-------------------
OpenOffice 4.1 e Libre Office 6.o.7.3 su Windows 10
allega un file di esempio, guadagnerai tempo tu e lo farai risparmiare a chi ti aiuta
patel
Volontario attivo
Volontario attivo
 
Messaggi: 3291
Iscritto il: venerdì 30 aprile 2010, 8:04
Località: Livorno

Re: Formattazione numeri in MACRO

Messaggioda Raoul Duke » venerdì 3 maggio 2019, 19:04

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
Raoul Duke
 
Messaggi: 113
Iscritto il: giovedì 7 marzo 2019, 13:11

Re: Formattazione numeri in MACRO

Messaggioda Gaetanopr » venerdì 3 maggio 2019, 22:12

Puoi fare in questo modo
Codice: Seleziona tutto   Espandi visualeStringi visuale
Sub Decimali
Doc = ThisComponent
Sheet = Doc.Sheets(0)
Sheet.getCellRangeByName("B15").NumberFormat = 2
end sub
Openoffice 4.1 su windows xp
Gaetanopr
Volontario
Volontario
 
Messaggi: 2722
Iscritto il: mercoledì 21 novembre 2012, 21:07

Re: Formattazione numeri in MACRO

Messaggioda patel » sabato 4 maggio 2019, 8:51

modo semplicissimo, ma vale soltanto per 2 decimali
-------------------
OpenOffice 4.1 e Libre Office 6.o.7.3 su Windows 10
allega un file di esempio, guadagnerai tempo tu e lo farai risparmiare a chi ti aiuta
patel
Volontario attivo
Volontario attivo
 
Messaggi: 3291
Iscritto il: venerdì 30 aprile 2010, 8:04
Località: Livorno

Re: Formattazione numeri in MACRO

Messaggioda Gaetanopr » sabato 4 maggio 2019, 9:23

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
Openoffice 4.1 su windows xp
Gaetanopr
Volontario
Volontario
 
Messaggi: 2722
Iscritto il: mercoledì 21 novembre 2012, 21:07

Re: Formattazione numeri in MACRO

Messaggioda patel » sabato 4 maggio 2019, 9:53

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   Espandi visualeStringi visuale
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
-------------------
OpenOffice 4.1 e Libre Office 6.o.7.3 su Windows 10
allega un file di esempio, guadagnerai tempo tu e lo farai risparmiare a chi ti aiuta
patel
Volontario attivo
Volontario attivo
 
Messaggi: 3291
Iscritto il: venerdì 30 aprile 2010, 8:04
Località: Livorno

Re: Formattazione numeri in MACRO

Messaggioda patel » sabato 4 maggio 2019, 10:08

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   Espandi visualeStringi visuale
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.
-------------------
OpenOffice 4.1 e Libre Office 6.o.7.3 su Windows 10
allega un file di esempio, guadagnerai tempo tu e lo farai risparmiare a chi ti aiuta
patel
Volontario attivo
Volontario attivo
 
Messaggi: 3291
Iscritto il: venerdì 30 aprile 2010, 8:04
Località: Livorno

Re: Formattazione numeri in MACRO

Messaggioda Gaetanopr » sabato 4 maggio 2019, 12:13

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   Espandi visualeStringi visuale
NumberFormatString = "0#,00"
se inserisci 5,25311 visualizzi 05,25
Se togli il # quindi
Codice: Seleziona tutto   Espandi visualeStringi visuale
NumberFormatString = "0,00"
se inserisci 5,25311 visualizzi 5,25

Non so se mi sono spiegato bene
Openoffice 4.1 su windows xp
Gaetanopr
Volontario
Volontario
 
Messaggi: 2722
Iscritto il: mercoledì 21 novembre 2012, 21:07

Re: Formattazione numeri in MACRO

Messaggioda patel » sabato 4 maggio 2019, 12:23

sono d'accordo, in pratica torniamo alla sub iniziale proposta da Roul che però non gli funzionava
-------------------
OpenOffice 4.1 e Libre Office 6.o.7.3 su Windows 10
allega un file di esempio, guadagnerai tempo tu e lo farai risparmiare a chi ti aiuta
patel
Volontario attivo
Volontario attivo
 
Messaggi: 3291
Iscritto il: venerdì 30 aprile 2010, 8:04
Località: Livorno

Re: Formattazione numeri in MACRO

Messaggioda Gaetanopr » sabato 4 maggio 2019, 12:23

Trasformerei la sub in una function da poter usare all'occorrenza senza ogni volta dover ricopiare la macro
Codice: Seleziona tutto   Espandi visualeStringi visuale
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
Openoffice 4.1 su windows xp
Gaetanopr
Volontario
Volontario
 
Messaggi: 2722
Iscritto il: mercoledì 21 novembre 2012, 21:07

Re: Formattazione numeri in MACRO

Messaggioda patel » sabato 4 maggio 2019, 12:34

E' stato più complicato del previsto, ma direi che ora abbiamo risolto a meno di sorprese sul MAC
-------------------
OpenOffice 4.1 e Libre Office 6.o.7.3 su Windows 10
allega un file di esempio, guadagnerai tempo tu e lo farai risparmiare a chi ti aiuta
patel
Volontario attivo
Volontario attivo
 
Messaggi: 3291
Iscritto il: venerdì 30 aprile 2010, 8:04
Località: Livorno

Re: Formattazione numeri in MACRO

Messaggioda Raoul Duke » sabato 4 maggio 2019, 12:43

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
Raoul Duke
 
Messaggi: 113
Iscritto il: giovedì 7 marzo 2019, 13:11

Re: Formattazione numeri in MACRO

Messaggioda Gaetanopr » sabato 4 maggio 2019, 13:10

Basta inserirla in un solo modulo, io solitamente creo un modulo chiamato Funzioni dove metto tutte le funzioni che mi servono
Openoffice 4.1 su windows xp
Gaetanopr
Volontario
Volontario
 
Messaggi: 2722
Iscritto il: mercoledì 21 novembre 2012, 21:07

Re: Formattazione numeri in MACRO

Messaggioda Raoul Duke » sabato 4 maggio 2019, 13:11

grazie!!! :D
OpenOffice 4.1.5 con MacOS 10.13.6
Raoul Duke
 
Messaggi: 113
Iscritto il: giovedì 7 marzo 2019, 13:11

Re: [Risolto] Formattazione numeri in MACRO

Messaggioda Gaetanopr » sabato 4 maggio 2019, 13:14

E' stato un lavoro di squadra :D
Openoffice 4.1 su windows xp
Gaetanopr
Volontario
Volontario
 
Messaggi: 2722
Iscritto il: mercoledì 21 novembre 2012, 21:07


Torna a Calc

Chi c’è in linea

Visitano il forum: Nessuno e 3 ospiti