Google Sheets no cuenta con una función nativa para convertir una cantidad numérica a texto, por lo tanto debemos hacer uso de funciones personalizadas para resolver este problema, pero que es una función personalizada?. Esta es una función o script que el usuario crea desde cero(de ahí lo de personalizada) de forma tal que puede imprimirle una personalización a un problema muy concreto
Afortunadamente , hay muchas personas que ofrecen soluciones distintas a problemas especifico, este no es la excepción , por lo que en esta ocasión estaremos aprovechando código de terceros
Revisando las opciones disponibles, me encontré una que me gusto y se adapta muy bien a Google Sheets, se trata de una propuesta escrita en lenguaje de programación Javascript y que es fácilmente adaptable a las hojas de calculo de Google para ser llamada como una función personalizada, precisamente lo que más me gusto es que no hay que hacer prácticamente retoques al código, asi que desde este rincón, agradecemos a su autor por su aporte
El sitio donde copie el código es este:
https://gist.github.com/alfchee/e563340276f89b22042a
algunas personas me han estado comentando que copian una versión que les da problemas, así que decidí dejar en este post la versión que use para Google Sheets con éxito, de esta manera pretendo limpiar un poco el camino para evitar este problema que están teniendo algunos por los motivos que sean, asi que al final encontraran el código para copiar y pegar
Lo único que hay que saber es como esta compuesta esta función personalizada
tiene una función maestra denominada NumeroALetras que es la que manda llamar a las funciones auxiliares
tiene 7 funciones auxiliares que forman parte de ella y que saber son:
Unidades
Decenas
DecenasY
Centenas
Seccion
Miles
Millones
cada función auxiliar colabora aportando algún datos especifico a la función maestra para que pueda hacer su trabajo de presentarnos un numero en texto
existen variantes que diversas personas han aportado a la versión original y al menos quién esto escribe considera que la original cumple en forma genérica con el propósito de mostrar un texto a partir de un numero, por lo que queda a consideración el emplear o no las diversas propuestas que ahí se hacen
este post y el ejemplo en video están basados en la propuesta original
dado que no he realizado ejemplos con las propuestas o mejoras alternas, no podría opinar o sugerir al respecto y por supuesto deberían sentirse libres de ir a preguntar a las personas que han realizado dichas modificaciones, pues son los creadores de las mismas los más indicados para hacerles consultas.
Finalmente la forma de llamar la la función desde Google Sheets, es como cualquier función nativa
se escribe el signo igual seguidamente del nombre de la función
se abre el paréntesis y se elige la celda que contiene el numero a convertir
se cierra el paréntesis y se da enter
dejo este video como complemento.
comparte este articulo o el video , si te fueron de utilidad 😊
si el tema fue de utilidad comparte este articulo con otras personas, nos ayudarías mucho haciendo difusión de estas propuestas 😉
/tomado de : https://gist.github.com/alfchee/e563340276f89b22042a
//*************************************************************/
// NumeroALetras
// The MIT License (MIT)
//
// Copyright (c) 2015 Luis Alfredo Chee
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in all
// copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
// SOFTWARE.
//
// @author Rodolfo Carmona
// @contributor Jean (jpbadoino@gmail.com)
/*************************************************************/
function Unidades(num){
switch(num)
{
case 1: return "UN";
case 2: return "DOS";
case 3: return "TRES";
case 4: return "CUATRO";
case 5: return "CINCO";
case 6: return "SEIS";
case 7: return "SIETE";
case 8: return "OCHO";
case 9: return "NUEVE";
}
return "";
}//Unidades()
function Decenas(num){
decena = Math.floor(num/10);
unidad = num - (decena * 10);
switch(decena)
{
case 1:
switch(unidad)
{
case 0: return "DIEZ";
case 1: return "ONCE";
case 2: return "DOCE";
case 3: return "TRECE";
case 4: return "CATORCE";
case 5: return "QUINCE";
default: return "DIECI" + Unidades(unidad);
}
case 2:
switch(unidad)
{
case 0: return "VEINTE";
default: return "VEINTI" + Unidades(unidad);
}
case 3: return DecenasY("TREINTA", unidad);
case 4: return DecenasY("CUARENTA", unidad);
case 5: return DecenasY("CINCUENTA", unidad);
case 6: return DecenasY("SESENTA", unidad);
case 7: return DecenasY("SETENTA", unidad);
case 8: return DecenasY("OCHENTA", unidad);
case 9: return DecenasY("NOVENTA", unidad);
case 0: return Unidades(unidad);
}
}//Unidades()
function DecenasY(strSin, numUnidades) {
if (numUnidades > 0)
return strSin + " Y " + Unidades(numUnidades)
return strSin;
}//DecenasY()
function Centenas(num) {
centenas = Math.floor(num / 100);
decenas = num - (centenas * 100);
switch(centenas)
{
case 1:
if (decenas > 0)
return "CIENTO " + Decenas(decenas);
return "CIEN";
case 2: return "DOSCIENTOS " + Decenas(decenas);
case 3: return "TRESCIENTOS " + Decenas(decenas);
case 4: return "CUATROCIENTOS " + Decenas(decenas);
case 5: return "QUINIENTOS " + Decenas(decenas);
case 6: return "SEISCIENTOS " + Decenas(decenas);
case 7: return "SETECIENTOS " + Decenas(decenas);
case 8: return "OCHOCIENTOS " + Decenas(decenas);
case 9: return "NOVECIENTOS " + Decenas(decenas);
}
return Decenas(decenas);
}//Centenas()
function Seccion(num, divisor, strSingular, strPlural) {
cientos = Math.floor(num / divisor)
resto = num - (cientos * divisor)
letras = "";
if (cientos > 0)
if (cientos > 1)
letras = Centenas(cientos) + " " + strPlural;
else
letras = strSingular;
if (resto > 0)
letras += "";
return letras;
}//Seccion()
function Miles(num) {
divisor = 1000;
cientos = Math.floor(num / divisor)
resto = num - (cientos * divisor)
strMiles = Seccion(num, divisor, "UN MIL", "MIL");
strCentenas = Centenas(resto);
if(strMiles == "")
return strCentenas;
return strMiles + " " + strCentenas;
}//Miles()
function Millones(num) {
divisor = 1000000;
cientos = Math.floor(num / divisor)
resto = num - (cientos * divisor)
strMillones = Seccion(num, divisor, "UN MILLON DE", "MILLONES DE");
strMiles = Miles(resto);
if(strMillones == "")
return strMiles;
return strMillones + " " + strMiles;
}//Millones()
function NumeroALetras(num) {
var data = {
numero: num,
enteros: Math.floor(num),
centavos: (((Math.round(num * 100)) - (Math.floor(num) * 100))),
letrasCentavos: "",
letrasMonedaPlural: 'PESOS',//Córdobas, "PESOS", 'Dólares', 'Bolívares', 'etcs'
letrasMonedaSingular: 'PESO', //Córdoba, "PESO", 'Dólar', 'Bolivar', 'etc'
letrasMonedaCentavoPlural: "CENTAVOS",
letrasMonedaCentavoSingular: "CENTAVO"
};
if (data.centavos > 0) {
data.letrasCentavos = "CON " + (function (){
if (data.centavos == 1)
return Millones(data.centavos) + " " + data.letrasMonedaCentavoSingular;
else
return Millones(data.centavos) + " " + data.letrasMonedaCentavoPlural;
})();
};
if(data.enteros == 0)
return "CERO " + data.letrasMonedaPlural + " " + data.letrasCentavos;
if (data.enteros == 1)
return Millones(data.enteros) + " " + data.letrasMonedaSingular + " " + data.letrasCentavos;
else
return Millones(data.enteros) + " " + data.letrasMonedaPlural + " " + data.letrasCentavos;
}//NumeroALetras()
Síguenos y suscríbete en: