De números a letras en Ubuntu con OpenOffice Vistas: 3323

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 Vistas: 3323

Responder a El atareao Cancelar la respuesta

Publicar comentario