lunes, 3 de octubre de 2011

Convertir Números a Letras en OpenOffice y LibreOffice



Hola de nuevo, ya tenía algunos días sin escribir o actualizar mi blog, por lo que ahora les comparto como convertir cantidades en número a letras o texto de monedas; alguna cantidad de formato numérico con 2 decimales, expresado en centésimos o centavos para cantidades monetarias.

Revisando en la red, encontré una macro que realiza la operación o conversión, pero funciona para OpenOffice 2.0, por lo que no me resultó útil, y ya que no sé lenguajes de programación, como para haberla estudiado y tratar de adaptarla a OpenOffice 3.0, tuve que hacerlo yo mismo, utilizando mis limitados conocimientos.

Utilizando las funciones que provee la hoja electrónica, me aboqué a generar una base de datos con los números escritos para pesos desde $1.00 hasta $100,000 (un peso hasta cien mil pesos), los centésimos o centavos también están expresados en dos dígitos sobre 100 (##/100).

El problema, posterior, fue generar las demás cantidades hasta llegar a $999,999, escribirlas resultaría una tarea ardua, por lo por medio de funciones logré expresar en letras desde $1.00 hasta $999,999. No se consideran los centésimos o centavos porque eso está resuelto en otra base de datos, dentro de la misma hoja Letra donde están escritos desde 00/100 hasta 99/100.


Descripción del flujo (Diagrama de flujo)

Ya que tengo generada la base de datos, el expresar un número menor a $100,000.00 (cien mil), solo es realizar una búsqueda del valor de referencia en la base de datos (ubicada en las celdas A1:B100000) colocada en otra hoja llamada Letra, dentro del mismo archivo o libro de trabajo.

=SI(B16<100001,
Entonces si el valor es verdadero verdadero realiza una búsueda vertical del valor de referencia B16 en base de datos Letra.A1:B100000, salida columna 2 (columna B, en la que están escritas las cantidades.)

Si el valor es falso, se realiza otro condicional (función anidada) donde se busca si el número es exactamente cientos de miles, sin pesos SI(INT(B16)/100000/INT(B16/100000)=1, esto porque ya están escritas las cantidades.

Entonces si el valor es verdadero buscamos el valor de referencia en donde están las escritas las cantidades de cientos de miles, en tres opciones, una por columna, la primera para el “prefijo” de cientos , la segunda de con cientos de miles y la tercera con cientos de miles de pesos. Se utiliza la tercer columna de las opciones, que corresponde a la columna 4 (columna J) del área de búsqueda en la hoja Letra referencia de G1:J9.

BUSCARV(B16,Letra.G1:J9,4)

Si el valor es falso, se anida otro condicional donde se busca saber si la parte excedente a los cientos de miles es menor a mil , para empezar a concatenar (unir los textos) los prefijos a las cantidades de la primer base de datos comentada (de 1 a 100,000), ya que si el excedente es menor a mil, el “prefijo” debe incluir la palabra “mil”, si el excedente es mayor a mil, el prefijo hace referencia a cientos y la palabra mil de los miles, se toman de los textos de la base de datos.

SI(RESIDUO(B16,100000)<1000,

CONCATENAR(BUSCARV(B16,Letra.G1:J9,3),BUSCARV(RESIDUO(B16,100000),Letra.A1:B99999,2)),

Si el valor es falso
CONCATENAR(BUSCARV(INT(B16),Letra.G1:J9,2),BUSCARV(RESIDUO(B16,100000),Letra.A1:B99999,2)))))






La función resultante es:

=SI(B16<100001,BUSCARV(B16,Letra.A1:B100000,2),SI(INT(B16)/100000/INT(B16/100000)=1,BUSCARV(B16,Letra.G1:J9,4),SI(RESIDUO(B16,100000)<1000,CONCATENAR(BUSCARV(B16,Letra.G1:J9,3),BUSCARV(RESIDUO(B16,100000),Letra.A1:B99999,2)),CONCATENAR(BUSCARV(INT(B16),Letra.G1:J9,2),BUSCARV(RESIDUO(B16,100000),Letra.A1:B99999,2)))))

La siguiente función (la cual es prácticamente la misma) se obtiene de definir previamente los nombres a utilizar en las áreas de referencia o búsqueda, para disminuir el “largo” de la misma función y, a mi criterio, disminuir el riesgo de error al estar definiendo áreas de referencia durante las búsquedas.

El nombre “Cantidad” representa al área de la base de datos desde 1 hasta 100,000 que está en la hoja Letra dentro de la referencia A1:B100000. El nombre “Pref” se encuentra dentro de la misma la hoja Letra pero hace referencia a las celdas G1:J9, en donde están escritos los prefijos de los cientos de miles. También esta definido el nombre de “Cent” que hace referencia a los centésimos o centavos.

=SI(B16<100001,BUSCARV(B16,Cantidad,2),SI(INT(B16)/100000/INT(B16/100000)=1,BUSCARV(B16,Pref,4),SI(RESIDUO(B16,100000)<1000,CONCATENAR(BUSCARV(B16,Pref,3), BUSCARV(RESIDUO(B16,100000),Cantidad,2)),CONCATENAR(BUSCARV(INT(B16),Pref,2),BUSCARV(RESIDUO(B16,100000),Cantidad,2)))))

Si les interesa el archivo con la base de datos y la fórmula para hacer la conversión está disponible en rapidshare para su  descarga o en la siguiente liga https://rapidshare.com/files/1357386069/Cant-A-Letra.ods y como plantilla desde la página de OpenOffice

No hay comentarios:

Publicar un comentario