Pannello di Controllo Moderatore ]

Estensione Numbertext

Discussioni sull'applicazione per i fogli di calcolo

Estensione Numbertext

Messaggioda Ant52 » sabato 21 novembre 2020, 10:06

Buongiorno a tutti,
in un file di OO calc ho tre celle che utilizzano l'estensione numbertext per trasformare il valore numerico della cella precedente in lettere. Il tutto ha funzionato perfettamente per oltre un anno ma, credo dopo un'aggiornamento di OO (ma non ne sono certo), ha smesso di funzionare e mi da errore 504. La cosa che mi sorprende è che, invece, con Libre Office continua a funzionare regolarmente. Qualcuno sa se c'è una nuova versione di questa estensione per OO o se c'è qualcosa da potere fare, in alternativa a questa estensione che non mi funziona, per trasformare un valore numerico (valuta nel mio caso specifico) in lettere? Grazie e buona giornata a tutti.
OpenOffice 4.1.5 Windows 10
Ant52
 
Messaggi: 97
Iscritto il: sabato 18 agosto 2018, 14:38

Re: Estensione Numbertext

Messaggioda patel » sabato 21 novembre 2020, 10:22

Il mio consiglio è di utilizzare Libre sempre, comunque puoi provare questa function
Codice: Seleziona tutto   Espandi visualeStringi visuale
Function spell_my_int(ByVal num as double) As String
    Dim centOOttanta As Boolean
    centOOttanta = false
    Dim numstring As String
    Dim numlen As Integer
    Dim IDcent As Byte
    Dim subnumerostring As String
    Dim subnumero As Integer
    Dim cifra(2) As String
    Dim text(2) As String
    Dim prime2cifre As Integer
    Dim result As String
    Dim sezione As Integer
    Dim mono(9) As String
    Dim duplo(9) As String
    Dim deca(9) As String
    Dim cento(2) As String
    Dim mili(1, 9) As String
    Dim parti() As String
    Dim centesimi As String
    Dim max
    max = ((10 ^ (6 * 3)) - 1) - 1
    '   Caricamento di mono() in formato esteso
    mono(0) = ""
    mono(1) = "uno"
    mono(2) = "due"
    mono(3) = "tre"
    mono(4) = "quattro"
    mono(5) = "cinque"
    mono(6) = "sei"
    mono(7) = "sette"
    mono(8) = "otto"
    mono(9) = "nove"
    '   Caricamento di duplo() in formato esteso
    duplo(0) = "dieci"
    duplo(1) = "undici"
    duplo(2) = "dodici"
    duplo(3) = "tredici"
    duplo(4) = "quattordici"
    duplo(5) = "quindici"
    duplo(6) = "sedici"
    duplo(7) = "dicias" & mono(7)
    duplo(8) = "dici" & mono(8)
    duplo(9) = "dician" & mono(9)
    '   Caricamento di deca() in formato esteso
    deca(0) = ""
    deca(1) = duplo(0)
    deca(2) = "venti"
    deca(3) = mono(3) & "nta"
    deca(4) = "quaranta"
    deca(5) = "cinquanta"
    deca(6) = "sessanta"
    deca(7) = "settanta"
    deca(8) = "ottanta"
    deca(9) = "novanta"
    '   Caricamento di cento() in formato esteso
    cento(0) = "cent"
    cento(1) = cento(0) & "o"
    '   Caricamento di mili(0 ,) in formato esteso
    mili(0, 0) = ""
    mili(0, 1) = "mille"
    mili(0, 2) = "milione"
    mili(0, 3) = "miliardo"
    mili(0, 4) = "bilione"
    mili(0, 5) = "biliardo"
    '   Caricamento di mili(1 ,) in formato esteso
    mili(1, 0) = ""
    mili(1, 1) = "mila"
    mili(1, 2) = "milioni"
    mili(1, 3) = "miliardi"
    mili(1, 4) = "bilioni"
    mili(1, 5) = "biliardi"
    result = ""
    sezione = 0
   
    parti()=split(str(num), ".")
    if ubound(parti)=0 then
       centesimi="00"
    else
   centesimi=left(parti(1)&"00",2)
    end if
    num=int(num)
   
    If (num < 0) Then
        spell_my_int = "Minimo 0!"
    ElseIf (num > max) Then
        spell_my_int = "Massimo " & max & "!"
    ElseIf (num = 0) Then
        spell_my_int = "zero"
    Else
        numstring = CStr(num)
        Select Case (Len(numstring) Mod 3)
            Case 1
                numstring = "00" & CStr(num)
            Case 2
                numstring = "0" & CStr(num)
            Case Else
                numstring = CStr(num)
        End Select
        numlen = Len(numstring)
        'MsgBox ("Numlen: " & numlen & "  subnumero: " & numstring)
        Do While ((sezione + 1) * 3 <= numlen)
            subnumerostring = Mid(numstring, (numlen - ((sezione + 1) * 3)) + 1, 3)
            subnumero = CInt(subnumerostring)
            cifra(0) = Mid(subnumerostring, 1, 1)
            cifra(1) = Mid(subnumerostring, 2, 1)
            cifra(2) = Mid(subnumerostring, 3, 1)
            'MsgBox ("Sezione numero: " & sezione & ", cifre della sezione: " & cifra(0) & cifra(1) & cifra(2))
            If (subnumero <> 0) Then
                prime2cifre = CInt(cifra(1)) * 10 + CInt(cifra(2))
                'MsgBox (prime2cifre)
                If (prime2cifre < 10) Then
                    text(2) = mono(cifra(2))
                    text(1) = ""
                ElseIf (prime2cifre < 20) Then
                    text(2) = ""
                    text(1) = duplo(prime2cifre - 10)
                Else
                    'ventitre => ventitrè
                    If (sezione = 0 And cifra(2) = 3) Then
                        text(2) = "trè"
                    Else
                        text(2) = mono(cifra(2))
                    End If
                    '   novantaotto => novantotto
                    If (cifra(2) = 1 Or cifra(2) = 8) Then
                        text(1) = Mid(deca(cifra(1)), 1, Len(deca(cifra(1))) - 1)
                    Else
                        text(1) = deca(cifra(1))
                    End If
                End If
                If (cifra(0) = 0) Then
                    text(0) = ""
                Else
                    ' centoottanta => centottanta
                    If (Not centOOttanta And cifra(1) = 8 Or (cifra(1) = 0 And cifra(2) = 8)) Then
                        IDcent = 0
                    Else
                        IDcent = 1
                    End If
                    If (cifra(0) <> 1) Then
                        text(0) = mono(cifra(0)) & cento(IDcent)
                    Else
                        text(0) = cento(IDcent)
                    End If
                End If
                '   unomille    => mille
                '   miliardo    => unmiliardo
                If (subnumero = 1 And sezione <> 0) Then
                    If (sezione >= 2) Then
                        result = "un" & mili(0, sezione) & result
                    Else
                        result = mili(0, sezione) & result
                    End If
                Else
                    result = text(0) & text(1) & text(2) & mili(1, sezione) & result
                End If
            End If
            sezione = sezione + 1
        Loop
        spell_my_int = result &"/"&centesimi
    End If
End Function
-------------------
OpenOffice 4.1 e Libre Office 6.4.1.2 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: 3571
Iscritto il: venerdì 30 aprile 2010, 7:04
Località: Livorno

[Risolto]Re: Estensione Numbertext

Messaggioda Ant52 » sabato 21 novembre 2020, 10:32

Grazie mille per il suggerimento, che senz'altro seguirò, e per la funzione sostitutiva dell'estensione. Comunque proprio in questo momento avevo aperto la Gestione estensioni e mi sono accorto che proprio Nunbertex era disabilitato....... Chiedo scusa per non avere fatto tutti i controlli prima di chiedere aiuto al forum ma, visto che funzionava con Libre Office, non avevo pensato a questa possibilità. Ancora grazie. Buona giornata
OpenOffice 4.1.5 Windows 10
Ant52
 
Messaggi: 97
Iscritto il: sabato 18 agosto 2018, 14:38

Re: Estensione Numbertext

Messaggioda Attilafdd » sabato 21 novembre 2020, 14:34

patel ha scritto:... puoi provare questa function

@patel :super:
Mi si ferma però alle centinaia di bilioni restituendo solo la parte decimale, idem per biliardi, ma non riesco a capire dove mettere mano al codice

num in testo.jpg
num in testo.jpg (44.93 KiB) Osservato 66 volte
LibreOffice 7.0.1 su Opensuse Leap 15.2 e 7.0.1 su Win 10
LO Portable 7.0.1 su Win 10

-------------------------------------------------
Se risolto inserisci [Risolto] nel titolo del post: https://forum.openoffice.org/it/forum/viewtopic.php?f=9&t=5661
Attilafdd
Volontario
Volontario
 
Messaggi: 388
Iscritto il: giovedì 5 aprile 2012, 7:25

Re: Estensione Numbertext

Messaggioda lucky63 » lunedì 23 novembre 2020, 23:44

Attilafdd ha scritto:si ferma però alle centinaia di bilioni

... per quanto compreso e che sono riuscito a fare ...
Ho apportato modifiche ma non sono riuscito a raggiungere il valore massimo impostato nel codice originario:
Codice: Seleziona tutto   Espandi visualeStringi visuale
Max = ((10 ^ (6 * 3)) - 1) - 1 

... se necessario cliccare sull'immagine per ingrandirla ...
Test - Function - Conversione da numerico a letterale - NrMassimoGestibile 9007199254740991.png

In entrambi i file di esempio i decimali sono visualizzati correttamente fino al numero:
9.999.999.999.999,97
ossia:
novebilioninovecentonovantanovemiliardinovecentonovantanovemilioninovecentonovantanovemilanovecentonovantanove/97
poi sempre come “/00” e il numero massimo gestibile è:
9.007.199.254.740.991
ossia:
novebiliardisettebilionicentonovantanovemiliardiduecentocinquantaquattromilionisettecentoquarantamilanovecentonovantuno/00.
Allego file distinti per eventuali test come come funzione e come macro [“Converti_Numero_In_Lettere()]”


Altre note utili nel codice.
.
Avatar utente
lucky63
Volontario assiduo
Volontario assiduo
 
Messaggi: 2290
Iscritto il: martedì 18 maggio 2010, 16:01

Re: Estensione Numbertext

Messaggioda Attilafdd » martedì 24 novembre 2020, 23:16

@lucky63 un lavoro di analisi sorprendente :super: :super:
Grandissimo! :bravo:
Direi che il nuovo massimo (con decimali) supera comunque ampiamente gli "usi comuni" della funzione... salvo che non si voglia scrivere in lettere il numero delle stelle o degli atomi (che peraltro non avrebbe senso indicare con i centesimi)... direi che 10 bilioni meno 3 centesimi sia un bel traguardo.

Grazie ancora
LibreOffice 7.0.1 su Opensuse Leap 15.2 e 7.0.1 su Win 10
LO Portable 7.0.1 su Win 10

-------------------------------------------------
Se risolto inserisci [Risolto] nel titolo del post: https://forum.openoffice.org/it/forum/viewtopic.php?f=9&t=5661
Attilafdd
Volontario
Volontario
 
Messaggi: 388
Iscritto il: giovedì 5 aprile 2012, 7:25


Torna a Calc

Chi c’è in linea

Visitano il forum: Nessuno e 10 ospiti