Professional Documents
Culture Documents
numricos
Camilo Bernal
10 de abril de 2016
ndice
1. Introduccin
2. Qu es LibreOffice?
3. Qu es GNU/Linux?
4. Qu es Python?
6
6
6
6
7
8
9
10
11
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
math de
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
python
. . . . .
.
.
.
.
.
.
.
.
7. Conclusiones
12
14
1.
Introduccin
Aunque LibreOffice Calc brinda la posibilidad de crear algoritmos bsicos para tratar
con problemas de mtodos numricos (muy frecuentes en matemticas e ingeniera),
el lenguaje de Macros (OOoBasic) en ocasiones brinda unas estructuras de datos muy
simples, que obligan a escribir mucho cdigo para realizar tareas que en otros lenguajes
resultaran simples.
Tambin se pueden usar los componentes de UNO (Universal Network Objects, objetos
de red universales) para acceder a las funciones de Calc directamente, pero suele ser
un proceso complejo y desalentador para quienes no tienen (y no les interesa tener)
profundos conocimientos de LibreOffice.
Lo ideal sera tener un lenguaje tan simple como OOoBasic pero que a la vez brinde
mayores posibilidades de expresin sin aumentar la complejidad. Pues bien, esta opcin
existe, y consiste en usar python como lenguaje para programar las macros en LibreOffice
Calc.
Python es un lenguaje de programacin con un conjunto de estructuras de datos mucho
ms amplio y verstil que OOoBasic, pero cuya sintaxis es igual de fcil. Con python se
tiene la posibilidad de usar listas, conjuntos, diccionarios, clases,... dentro de las macros
de LibreOffice, ampliando considerablemente la potencia de estas herramientas. Adems,
se pueden usar los numerosos mdulos estndar, que ahorrarn la escritura de mucho
cdigo en algunos problemas de mtodos numricos.
Aunque su funcionalidad dentro de las macros de LibreOffice puede ser limitada (por
ahora), python puede facilitar enormemente el trabajo de clculos numricos en una hoja
de clculo. La mejor alternativa sera usar python y OOoBasic en conjunto, con lo cual
se obtiene una funcionalidad completa.
2.
Qu es LibreOffice?
3.
Qu es GNU/Linux?
4.
Qu es Python?
Python es un lenguaje de programacin multiparadigma (soporta programacin orientada a objetos, programacin imperativa y programacin funcional). Es un lenguaje
interpretado multiplataforma (se puede usar en Microsoft Windows, GNU/Linux, Unix
y MacOS) y de tipado dinmico.
El intrprete de Python viene pre-instalado en los sistemas tipo Unix (GNU/Linux y
MacOS). Para los que usan Microsoft Windows deben buscarlo en google.
5.
Una completa explicacin de los principios conceptuales y tcnicos del uso de python en
LibreOffice puede encontrarse en internet. Sin embargo, el propsito del presente documento es mantener las cosas lo ms simple posible, y por tanto se har una explicacin
del cmo (superficialmente) y se deja al lector la tarea de averiguar el qu y el por qu.
La explicacin que se da aqu funciona para la plataforma GNU/Linux, de modo que es
preciso hacer algunas pequeas modificaciones para que funcione para los usuarios de
Windows y MacOS.
Lo que se necesita esencialmente son cuatro elementos: 1) Una versin de LibreOffice
4.1 o Superior, 2) Una versin del intrprete de python 2.7 o Superior, 3) El paquete
python-uno y 4) El paquete libreoffice-script-provider-python. Estos paquetes se pueden
instalar fcilmente desde el gestor de software o el emulador de terminal.
Una vez instalados, los scripts de python se almacenarn en el directorio /usr/lib/libreoffice/share/Scripts/python (en caso de que no sea as, es preciso revisar la configuracin
particular de libreoffice en su sistema). En este directorio se crearn los subdirectorios de
trabajo que sean necesarios (hay que tener privilegios de administrador para realizar este
tipo de tareas). En nuestro caso se crear el subdirectorio Matematicas, para escribir
los scripts de ejemplo, para empezar se puede crear un fichero llamado Ejemplos.py.
Se recomienda hacer una lectura rpida a la documentacin de python y LibreOffice
para no quedar perdidos en los ejemplos, aunque si estas leyendo esto, seguramente ya
sabes de qu va el asunto.
6.
6.1.
La funcin que captura una celda para obtener su valor u otorgarle otro es una de las ms
bsicas y esenciales, pues permitir interactuar con la primera hoja del documento Calc
sobre el que estemos trabajando. En el fichero Ejemplos.py escribiremos esta funcin
de la siguiente manera:
Listing 1: Funcin CP
def CP( columna =0, f i l a =0):
e s c r i t o r i o = XSCRIPTCONTEXT. getDesktop ( )
Objeto = e s c r i t o r i o . getCurrentComponent ( )
Hoja = Objeto . C u r r e n t C o n t r o l l e r . A c t i v e S h e e t
Celda = Hoja . g e t C e l l B y P o s i t i o n ( columna , f i l a )
return Celda
6.2.
6.3.
6.4.
Nmeros armnicos
1
La funcin escribe unos nmeros, calcula los nmeros armnicos HN = N
n=1 n , y comprueba la veracidad de los anlisis matemticos que establecen que HN ln (N ) +
0,57721 para N grande.
columna = 0
CP( columna , f i l a ) . S t r i n g = "N"
f i l a += 1
for dato in d a t o s :
CP( columna , f i l a ) . Value = dato
f i l a += 1
#E s c r i b i r numeros armonicos
fila = 0
columna = 1
CP( columna , f i l a ) . S t r i n g = "H_N"
f i l a += 1
for nh in armonicos :
CP( columna , f i l a ) . Value = nh
f i l a += 1
#E s c r i b i r v a l o r de comparacion
fila = 0
columna = 2
CP( columna , f i l a ) . S t r i n g = " Ln (N)+0 ,57721 "
f i l a += 1
for d_c in d_comparacion :
CP( columna , f i l a ) . Value = d_c
f i l a += 1
6.5.
La funcin recibe unos valores procedentes de dos celdas y calcula la siguiente expresin:
T (a, x) =
a ln (x)
a
cos x
si x > 0
+ sin
a
x
+ ex
si x < 0
si x = 0
Listing 5: Funcion T
def T( col_a =0, f i l _ a =0, col_x =0, f i l _ x =1):
import math
6.6.
Estadsticas bsicas
La funcin genera unos valores de prueba, calcula algunos datos estadsticos bsicos y
luego escribe la informacin en la hoja de clculo.
Listing 6: Funcion estadistica
def e s t a d i s t i c a ( ) :
import random
import math
#Generar 20 v a l o r e s de prueba
valores = [ ]
for i in range ( 2 0 ) :
v a l o r e s . append ( random . uniform ( 0 , 1 0 0 ) )
#E s t a d i s t i c a s b a s i c a s
#Maximo
maximo = max( v a l o r e s )
#Minimo
minimo = min( v a l o r e s )
#Promedio
promedio = sum( v a l o r e s ) / len ( v a l o r e s )
#Varianza
vlr_v = 0
for v a l o r in v a l o r e s :
vlr_v += math .pow( ( v a l o r promedio ) , 2 )
v a r i a n z a = vlr_v / ( len ( v a l o r e s ) 1 )
#D e s v i a c i o n e s t a n d a r
desv_est = math . s q r t ( v a r i a n z a )
#
#ESCRIBIR LA INFORMACION
#
#E s c r i b i r v a l o r e s de prueba
fila = 0
columna = 0
CP( columna , f i l a ) . S t r i n g = " X_i "
f i l a += 1
for dato in v a l o r e s :
CP( columna , f i l a ) . Value = dato
f i l a += 1
#E s c r i b i r e s t a d i s t i c a s b a s i c a s
CP( 2 , 2 ) . S t r i n g = " Maximo : "
CP( 3 , 2 ) . Value = maximo
CP( 2 , 3 ) . S t r i n g = " Minimo : "
CP( 3 , 3 ) . Value = minimo
CP( 2 , 4 ) . S t r i n g = " Promedio : "
CP( 3 , 4 ) . Value = promedio
CP( 2 , 5 ) . S t r i n g = " Varianza : "
CP( 3 , 5 ) . Value = v a r i a n z a
CP( 2 , 6 ) . S t r i n g = " Des . Estandar : "
CP( 3 , 6 ) . Value = desv_est
6.7.
10
e: Nmero e (2.718281828459045)
pi: Nmero ( 3.141592653589793)
6.8.
11
7.
Conclusiones
Es posible escribir macros en LibreOffice con el lenguaje python, de una manera
igual de sencilla y agradable que OOoBasic, pero con toda la potencia y versatilidad
de un lenguaje de programacin profesional.
Las macros escritas en python pueden extender enormemente la capacidad de las
hojas de clculo de LibreOffice.
12
Referencias
[1] Wikipedia: La enciclopedia libre. GNU/Linux.
http://es.wikipedia.org/wiki/GNU/Linux?oldid=78087514. Fecha de acceso: 11 nov
2014.
[2] Wikipedia:
La
enciclopedia
libre.
Software
libre.
http://es.wikipedia.org/wiki/Software_libre?oldid=78063707. Fecha de acceso:
mi 12 nov 2014.
[3] Wikipedia: La enciclopedia libre. Python. http://es.wikipedia.org/w/index.php?oldid=75999492.
Fecha de acceso: vie 15 ago 2014.
13
A.
14
nh += 1/ i
armonicos . append ( nh )
#O b t i e n e l o s d a t o s de comparacion
d_comparacion = [ ]
for dato in d a t o s :
d_comparacion . append ( math . l o g ( dato ) + 0 . 5 7 7 2 1 )
#E s c r i b e l a i n f o r m a c i o n en l a h o j a de c a l c u l o
#E s c r i b i r d a t o s i n i c i a l e s
fila = 0
columna = 0
CP( columna , f i l a ) . S t r i n g = "N"
f i l a += 1
for dato in d a t o s :
CP( columna , f i l a ) . Value = dato
f i l a += 1
#E s c r i b i r numeros armonicos
fila = 0
columna = 1
CP( columna , f i l a ) . S t r i n g = "H_N"
f i l a += 1
for nh in armonicos :
CP( columna , f i l a ) . Value = nh
f i l a += 1
#E s c r i b i r v a l o r de comparacion
fila = 0
columna = 2
CP( columna , f i l a ) . S t r i n g = " Ln (N)+0 ,57721 "
f i l a += 1
for d_c in d_comparacion :
CP( columna , f i l a ) . Value = d_c
f i l a += 1
15
16
#E s c r i b i r v a l o r e s de prueba
fila = 0
columna = 0
CP( columna , f i l a ) . S t r i n g = " X_i "
f i l a += 1
for dato in v a l o r e s :
CP( columna , f i l a ) . Value = dato
f i l a += 1
#E s c r i b i r e s t a d i s t i c a s b a s i c a s
CP( 2 , 2 ) . S t r i n g = " Maximo : "
CP( 3 , 2 ) . Value = maximo
CP( 2 , 3 ) . S t r i n g = " Minimo : "
CP( 3 , 3 ) . Value = minimo
CP( 2 , 4 ) . S t r i n g = " Promedio : "
CP( 3 , 4 ) . Value = promedio
CP( 2 , 5 ) . S t r i n g = " Varianza : "
CP( 3 , 5 ) . Value = v a r i a n z a
CP( 2 , 6 ) . S t r i n g = " Des . Estandar : "
CP( 3 , 6 ) . Value = desv_est
g _ e x p o r t e d S c r i p t s = f , f a c t o r i a l , armonico , T, e s t a d i s t i c a ,
17