Anoche me puse a buscar alguna macro para convertir de número a letras y en cosa de 10 minutos me encontré uno, lo probé y me gusto, luego al otro dia me di cuenta que tenia unos detallitos y me propuse corregirlo, detalles menores cosa de paréntesis y cosas sencillas, como no se nada de basic de openoffice pero algo de programación no creo que fuera mucho problema y así fue, en cosa de otros 15 minutos estaba como queria y aqui dejo el resultado.
El macro original es de Néstor Londoño B. y lo encontre en http://user.services.openoffice.org/es/forum/viewtopic.php?f=21&t=806
Aquí pongo el macro y la explicacion el macro que pongo es el que yo modifique y se ajusta a lo que necesito.
El macro original funciona bien lo que yo cambie fue estética en la presentación para ajustarlo a mis gustos.
Instrucciones:
1 - Abra OOo en hoja de cálculo.
2 - Vaya a la barra superior <Herramientas> < Macros> < Organizar MacrosOpenOffice.org Basic>
se abre otra ventana <Macros básicas de OpenOficce>
Abra ahora <Mis Macros> <Standard>
en la derecha utilice <Administrar>
en la nueva ventana escoja <Nuevo>
se abre nuevo módulo y pulse <Aceptar> ahora <Editar> y Borre la Sub Main y End Sub; en éste espacio pegue la macro.
Cierre la Macro.
3 - Escriba un Número en una casilla y donde necesite que salga el texto ejecute la función Cnp() o Cnt()
Escribimos =cnp(A1) y ejecutamos la instrucción.[Enter]. donde A1 es la casilla donde esta el número.
REM ***** BASIC *****
Dim texno (41) as string
Function Cnp ( X as currency ) as string
'Dim Cnp$, X@
'X=50000
Dim A%,B%,E$,F$,N$,pEnsa$,F1%
Cnp = ""
Texto
if X = 0 then Exit Function
If X > 15000000000000 then
print "Número muy grande "
Exit Function
End if
N = Str(X)
for I = 1 to len(N)
if Asc(mid$(N,I,1))= 46 then
E = left$ (N,I-1)
F = right$ (N,(len(N)-I)
F = left$ (F,2)
F1 = Val (F)
CT = I
end if
next
NL = (len(E)-1) \ 3
NK = (len(E)-1) mod 3
if NK = 0 then
NK = 3
NL = NL-1
end if
A = val(mid(E,2,NK))
pEnsa = Escribe(A) + texno (NL+37)
if NL = 4 or NL = 2 then
if A = 1 then
pEnsa = pEnsa + "ón "
else
pEnsa = pEnsa + "ones "
end if
end if
if NL = 3 and Val(mid(E,nk+2,3)) = 0 then
pEnsa = pEnsa + "millones "
end if
for J = NK+2 to Len(E) step 3
A=val(mid$(E,j,3))
NL = NL - 1
if A > 0 then
pEnsa = pEnsa & Escribe(A) + texno (NL+37)
if NL = 2 then
if A = 1 then
pEnsa = pEnsa + "ón "
end if
if A >1 then
pEnsa = pEnsa + "ones "
end if
end if
end if
next
if right(pEnsa,5) = "ones " or right(pEnsa,3) = "ón " then
pEnsa = pEnsa + "de "
end if
if pEnsa = "" then pEnsa = "Cero "
if pEnsa = "un " then
pEnsa = pEnsa + "peso "
else
pEnsa = pEnsa + "pesos "
end if
if F1 >=1 then 'México: If F = 0 then F = "00"
A = F
'pen = Escribe ( A )'Si desea que las fracciones se escriba en texto entonces active estas dos lineas quitando el apostrofe inicial
'pEnsa = pEnsa + "con " + pen + "céntimos "' y desactive la linea inferior, logicamente colocando el apostrofe.
pEnsa = pEnsa + "con " + F1 +"/100 " 'Formato "01" con F
End if 'Mex: Elimine línea
pEnsa = Ucase("("+left(pEnsa,1))+ right(pEnsa,len(pEnsa)-1) + "M.N.)"
Cnp = pEnsa
End Function
sub Texto ()
texno(0) = "es "
Texno(1) = "un "
Texno(2) = "dos "
Texno(3) = "tres "
texno(4) = "cuatro "
texno(5) = "cinco "
texno(6) = "seis "
texno(7) = "siete "
texno(8) = "ocho "
texno(9) = "nueve "
Texno(10) = "diez "
texno(11) = "once "
texno(12) = "doce "
texno(13) = "trece "
texno(14) = "catorce "
texno(15) = "quince "
texno(16) = "dieciséis "
texno(17) = "diecisiete "
texno(18) = "dieciocho "
texno(19) = "diecinueve "
texno(20) = "veint"
texno(21) = "treinta "
texno(22) = "cuarenta "
texno(23) = "cincuenta "
texno(24) = "sesenta "
texno(25) = "setenta "
texno(26) = "ochenta "
texno(27) = "noventa "
texno(28) = "ciento "
texno(29) = "doscientos "
texno(30) = "trescientos "
texno(31) = "cuatrocientos "
texno(32) = "quinientos "
texno(33) = "seiscientos "
texno(34) = "setecientos "
texno(35) = "ochocientos "
texno(36) = "novecientos "
texno(37) = ""
texno(38) = "mil "
texno(39) = "mill"
texno(40) = "mil "
texno(41) = "bill"
end sub
Function Escribe (ByVal A as integer)
dim escrito as string
dim NA as integer
dim NB as integer
NA = A
if NA >= 100 then
NB = NA \ 100
NA = NA - NB *100
if NB = 1 and NA = 0 then
escrito = "cien "
else
escrito = texno(NB + 27)
end if
end if
NB = NA \ 10
NA = NA -10 * NB
if NB > 2 then
escrito = escrito & texno(NB + 18)
if NA > 0 then
Escrito = Escrito & "y " & Texno (NA)
End if
NA = 0
end if
if NB = 2 then
if NA = 0 then
escrito = escrito + "veinte "
end if
if NA = 1 then
escrito = escrito + "veintiún "
end if
if NA > 1 then
escrito = escrito & texno(20) +"i" & texno (NA
end if
end if
NA = 10 * NB + NA
if NA < 20 and NA > 0 then
escrito = escrito & texno (NA)
end if
Escribe = Escrito
End function
Function Cnt ( X as currency ) as string
'Dim Cnl$, X@
'X=50000
dim FX$, PX$, Y as Variant, T as variant
Cnt = ""
Cnt = Cnp(X)
Y = X
If Y = 0 then Exit Function
Reval ( Y ) 'Para México agregue if X - int ( X ) = 0 then T = ",00"
Cnt = Cnt + " (" + Y + ")" 'Cambiar CNT = Y + T + " (" + cnt + ")"
end function
Function Reval ( X as Variant ) as Variant
Dim L as Integer 'Recibe un valor numérico y la da formato de moneda
Dim J as integer
Dim K as integer
Dim Y as variant
Dim FX as string
X = Str ( X )
X = Trim ( X )
L = Len ( X )
For J = L to 1 Step - 1
If Mid (X, J, 1) = "," or Mid ( X, J, 1 ) = "." then
K = L - J
L = J - 1
J = 0
End If
next
If K > 0 then FX = "," + Right ( X, K )
X = left ( X, L )
FX = Left ( FX, 3 )
If Val ( FX ) = 0 then FX = ""
If L <= 3 then Y = X
Do while Len ( X ) > 3
Y = "." + right ( X, 3 ) + Y
X = left ( X, len( X ) - 3 )
If len ( X ) <= 3 then
Y = X + Y
X = ""
end if
Loop
'If FX = "" then FX = ",00" PARA MEXICO
X = "$" + Y + FX
Reval = X
End function
Entre los beneficios de actualizar a KDE 4.6 es que se a mejorado la velocidad de kwin y plasma.
debemos agregar un nuevo repositorio a nuestro Kubuntu
add-apt-repository ppa:kubuntu-ppa/backports
luuego actualizar
aptitude update
aptitude dist-upgrade
eso es todo

Add comment