Convertir Números en letras en LibreOffice

A continuación te presento un ejemplo de macro en LibreOffice Basic que convierte un número (hasta millones) en su representación en letras en español. Puedes copiar este código en el editor de macros de LibreOffice (Menú: Herramientas → Macros → Organizar macros → LibreOffice Basic) y luego asignarlo a una función o a un botón según necesites.

-----------------------------

' Función principal: recibe un número y devuelve su representación en letras. Function NumeroALetras(ByVal numero As Double) As String Dim entero As Long entero = Int(numero) NumeroALetras = ConvertirNumero(entero) End Function ' Función que descompone el número en millones, miles y unidades menores de 1000. Function ConvertirNumero(ByVal numero As Long) As String Dim texto As String Dim millones As Long, miles As Long, resto As Long If numero = 0 Then ConvertirNumero = "cero" Exit Function End If ' Obtener la parte de millones, miles y el resto. millones = numero \ 1000000 resto = numero Mod 1000000 miles = resto \ 1000 resto = resto Mod 1000 ' Procesar millones If millones > 0 Then If millones = 1 Then texto = texto & "un millón " Else texto = texto & ConvertirMenor1000(millones) & " millones " End If End If ' Procesar miles If miles > 0 Then If miles = 1 Then texto = texto & "mil " Else texto = texto & ConvertirMenor1000(miles) & " mil " End If End If ' Procesar el resto (de 0 a 999) If resto > 0 Then texto = texto & ConvertirMenor1000(resto) End If ConvertirNumero = Trim(texto) End Function ' Función que convierte un número de 1 a 999 en letras. Function ConvertirMenor1000(ByVal numero As Long) As String Dim texto As String Dim centenas As Long, decenaUnidad As Long ' Caso especial: 100 exacto If numero = 100 Then ConvertirMenor1000 = "cien" Exit Function End If ' Procesar centenas centenas = numero \ 100 Select Case centenas Case 1 If numero Mod 100 = 0 Then texto = "cien" Else texto = "ciento " End If Case 2: texto = "doscientos " Case 3: texto = "trescientos " Case 4: texto = "cuatrocientos " Case 5: texto = "quinientos " Case 6: texto = "seiscientos " Case 7: texto = "setecientos " Case 8: texto = "ochocientos " Case 9: texto = "novecientos " Case Else: texto = "" End Select ' Procesar decenas y unidades (números entre 0 y 99) decenaUnidad = numero Mod 100 If decenaUnidad < 30 Then Select Case decenaUnidad Case 0: texto = texto ' no se agrega nada Case 1: texto = texto & "uno" Case 2: texto = texto & "dos" Case 3: texto = texto & "tres" Case 4: texto = texto & "cuatro" Case 5: texto = texto & "cinco" Case 6: texto = texto & "seis" Case 7: texto = texto & "siete" Case 8: texto = texto & "ocho" Case 9: texto = texto & "nueve" Case 10: texto = texto & "diez" Case 11: texto = texto & "once" Case 12: texto = texto & "doce" Case 13: texto = texto & "trece" Case 14: texto = texto & "catorce" Case 15: texto = texto & "quince" Case 16: texto = texto & "dieciséis" Case 17: texto = texto & "diecisiete" Case 18: texto = texto & "dieciocho" Case 19: texto = texto & "diecinueve" Case 20: texto = texto & "veinte" Case 21: texto = texto & "veintiuno" Case 22: texto = texto & "veintidós" Case 23: texto = texto & "veintitrés" Case 24: texto = texto & "veinticuatro" Case 25: texto = texto & "veinticinco" Case 26: texto = texto & "veintiséis" Case 27: texto = texto & "veintisiete" Case 28: texto = texto & "veintiocho" Case 29: texto = texto & "veintinueve" End Select Else Dim decenas As Long, unidades As Long decenas = decenaUnidad \ 10 unidades = decenaUnidad Mod 10 Select Case decenas Case 3: texto = texto & "treinta" Case 4: texto = texto & "cuarenta" Case 5: texto = texto & "cincuenta" Case 6: texto = texto & "sesenta" Case 7: texto = texto & "setenta" Case 8: texto = texto & "ochenta" Case 9: texto = texto & "noventa" End Select If unidades > 0 Then texto = texto & " y " Select Case unidades Case 1: texto = texto & "uno" Case 2: texto = texto & "dos" Case 3: texto = texto & "tres" Case 4: texto = texto & "cuatro" Case 5: texto = texto & "cinco" Case 6: texto = texto & "seis" Case 7: texto = texto & "siete" Case 8: texto = texto & "ocho" Case 9: texto = texto & "nueve" End Select End If End If ConvertirMenor1000 = Trim(texto) End Function



Cómo utilizar la macro

  1. Abrir el editor de macros:

    • En LibreOffice, ve a Herramientas > Macros > Organizar macros > LibreOffice Basic.
    • Selecciona el documento (o "Mis macros") donde deseas guardar la macro.
    • Haz clic en Nuevo para crear un módulo y pega el código anterior.
  2. Llamar a la función:

    • Desde una celda en Calc, puedes llamar a la función si la defines como función (por ejemplo, =NumeroALetras(A1) donde A1 contiene el número).
    • O bien, puedes ejecutar la macro desde el editor de macros o asignarla a un botón.

Consideraciones

  • Esta macro convierte la parte entera del número. Si deseas incluir decimales (por ejemplo, para expresar centavos), se puede ampliar la función.
  • El código está diseñado para números positivos hasta el rango de millones. Para números mayores o negativos, se deberán agregar condiciones adicionales.

Con esta macro podrás convertir números en su representación en letras en español, abarcando unidades, decenas, centenas, miles y millones. ¡Espero que te sea de utilidad!



Comentarios

Entradas populares de este blog

EXTRAER NOMBRES

15 RANCHERAS JORGE

Bálsamo