De números a letras en Ubuntu con OpenOffice

Una de las situaciones más habituales con la que nos encontramos aquellos que trabajamos con números, es la de tener que escribir una cifra en letras, es decir:

1.347.453 -> UN MILLÓN TRESCIENTOS CUARENTA Y SIETE MIL CUATROCIENTOS CINCUENTA Y TRES

Normalmente este tipo de operaciones las hacemos en una hoja de cálculo. Así que es muy interesante tener una función que se encargue de realizar tan tediosa operación, y tan propicia al error. Y es que es muy común equivocarse en este tipo de conversión tan sencilla

Pues la misión de este post, es la dejaros semejante función que programé ya hace unos años y que ha sido de gran ayuda a mas de uno:

Lo que tienes que hacer es copiar esta función en OpenOffice:

Herramientas > Macros > Organizar Macros > OpenOffice.org Basic …

y en la ventana que te aparece haces click en el botón «editar», y pegas las líneas que ves a continuación.

[vb]

Function Lee_numero(Number)
Dim longit
Dim trios
Dim numero_leido
Dim parte_izquierda
Dim parte_derecha
Dim Value
Dim unidades(30)
Dim decenas(9)
Dim centenas(9)

unidades(0) = «»
unidades(1) = «uno»
unidades(2) = «dos»
unidades(3) = «tres»
unidades(4) = «cuatro»
unidades(5) = «cinco»
unidades(6) = «seis»
unidades(7) = «siete»
unidades(8) = «ocho»
unidades(9) = «nueve»
unidades(10) = «diez»
unidades(11) = «once»
unidades(12) = «doce»
unidades(13) = «trece»
unidades(14) = «catorce»
unidades(15) = «quince»
unidades(16) = «dieciseis»
unidades(17) = «diecisiete»
unidades(18) = «dieciocho»
unidades(19) = «diecinueve»
unidades(20) = «veinte»
unidades(21) = «veintiuno»
unidades(22) = «veintidos»
unidades(23) = «veintitres»
unidades(24) = «veinticuatro»
unidades(25) = «veinticinco»
unidades(26) = «veintiseis»
unidades(27) = «veintisiete»
unidades(28) = «veintiocho»
unidades(29) = «veintinueve»
unidades(30) = «treinta»
decenas(4) = «cuarenta»
decenas(5) = «cincuenta»
decenas(6) = «sesenta»
decenas(7) = «setenta»
decenas(8) = «ochenta»
decenas(9) = «noventa»
centenas(0) = «»
centenas(1) = «ciento»
centenas(2) = «doscientos»
centenas(3) = «trescientos»
centenas(4) = «cuatrocientos»
centenas(5) = «quinientos»
centenas(6) = «seiscientos»
centenas(7) = «setecientos»
centenas(8) = «ochocientos»
centenas(9) = «novecientos»

Value = Val(Number)
longit = Len(Number)
trios = longit / 3
Select Case longit
Case Is < 3
Select Case Value
Case Is < 31
numero_leido = unidades(Value)
Case 31 To 39
numero_leido = unidades(30) + » y » + unidades(Value – 30)
Case 40
numero_leido = decenas(4)
Case 41 To 49
numero_leido = decenas(4) + » y » + unidades(Value – 40)
Case 50
numero_leido = decenas(5)
Case 51 To 59
numero_leido = decenas(5) + » y » + unidades(Value – 50)
Case 60
numero_leido = decenas(6)
Case 61 To 69
numero_leido = decenas(6) + » y » + unidades(Value – 60)
Case 70
numero_leido = decenas(7)
Case 71 To 79
numero_leido = decenas(7) + » y » + unidades(Value – 70)
Case 80
numero_leido = decenas(8)
Case 81 To 89
numero_leido = decenas(8) + » y » + unidades(Value – 80)
Case 90
numero_leido = decenas(9)
Case 91 To 99
numero_leido = decenas(9) + » y » + unidades(Value – 90)
End Select
Case Is < 4
parte_izquierda = Left(Number, 1)
parte_derecha = Right(Number, 2)
If parte_derecha = «00» And parte_izquierda = «1» Then
numero_leido = «cien»
Else
numero_leido = centenas(Val(parte_izquierda)) + » » + Lee_numero(parte_derecha)
End If
Case Is < 7 parte_izquierda = Left(Number, longit – 3) parte_derecha = Right(Number, 3) Select Case Val(parte_izquierda) Case Is = 0 numero_leido = Lee_numero(parte_derecha) Case Is = 1 numero_leido = «mil » + Lee_numero(parte_derecha) Case Is > 1
numero_leido = Lee_numero(parte_izquierda) + » mil » + Lee_numero(parte_derecha)
End Select
Case Is < 13 parte_izquierda = Left(Number, longit – 6) parte_derecha = Right(Number, 6) Select Case Val(parte_izquierda) Case Is = 0 numero_leido = Lee_numero(parte_derecha) Case Is = 1 numero_leido = «un millón » + Lee_numero(parte_derecha) Case Is > 1
parte_izquierda = parte_izquierda
If Right(parte_izquierda, 1) = «1» Then
numero_leido = Left(Lee_numero(parte_izquierda), Len(Lee_numero(parte_izquierda)) – 1) + » millón » + Lee_numero(parte_derecha)
Else
numero_leido = Lee_numero(parte_izquierda) + » millones » + Lee_numero(parte_derecha)
End If
End Select
Case Is < 25 parte_izquierda = Left(Number, longit – 12) parte_derecha = Right(Number, 12) Select Case Val(parte_izquierda) Case Is = 0 numero_leido = Lee_numero(parte_derecha) Case Is = 1 numero_leido = «un billón » + Lee_numero(parte_derecha) Case Is > 1
numero_leido = Lee_numero(parte_izquierda) + » billones » + Lee_numero(parte_derecha)
End Select
Case Is < 49 parte_izquierda = Left(Number, longit – 24) parte_derecha = Right(Number, 24) Select Case Val(parte_izquierda) Case Is = 0 numero_leido = Lee_numero(parte_derecha) Case Is = 1 numero_leido = «un trillón » + Lee_numero(parte_derecha) Case Is > 1
numero_leido = Lee_numero(parte_izquierda) + » trillones » + Lee_numero(parte_derecha)
End Select
Case Is < 97 parte_izquierda = Left(Number, longit – 48) parte_derecha = Right(Number, 48) Select Case Val(parte_izquierda) Case Is = 0 numero_leido = Lee_numero(parte_derecha) Case Is = 1 numero_leido = «un cuatrillón » + Lee_numero(parte_derecha) Case Is > 1
numero_leido = Lee_numero(parte_izquierda) + » cuatrillones » + Lee_numero(parte_derecha)
End Select
Case Is < 193 parte_izquierda = Left(Number, longit – 96) parte_derecha = Right(Number, 96) Select Case Val(parte_izquierda) Case Is = 0 numero_leido = Lee_numero(parte_derecha) Case Is = 1 numero_leido = «un quintillón » + Lee_numero(parte_derecha) Case Is > 1
numero_leido = Lee_numero(parte_izquierda) + » quintillones » + Lee_numero(parte_derecha)
End Select
End Select
Lee_numero = UCase(numero_leido)
End Function
[/vb]

Si además quieres que la función te lea los decimales simplemente tendras que hacer algo como esto:

[vb]
=LEE_NUMERO(ENTERO(A1))&» CON «&LEE_NUMERO(ENTERO((A1-ENTERO(A1))*100))
[/vb]

Donde A1 es la celda que contiene nuestro numerito.

9 comentarios en “De números a letras en Ubuntu con OpenOffice

  1. DA
    Darketzer hace 14 años

    Wow…

  2. GA
    garciaparra08 hace 12 años

    no me funsiono que tengo que modificarle para que me funsione?

  3. AR
    Armando hace 10 años

    no funciona
    ¿creen que tenga algo que ver, el hecho de que lo pruebe el libreoffice y no en openoffice?

    1. EL
      El atareao hace 10 años

      No debería, de cualquier forma en los próximos días publico una extensión para ello.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *