Codigo Python
Disectamos la estructura del script de python en partes para su estudio.
Una vez aprendido la estructura, ahora podemos empezar a estudiar nuestro codigo. Este codigo se puede dividir en grandes rasgos en tres partes.
- Insertar los modulos correspondientes
- Declarar los servicios y componentes para el desarrollo
- Insertar el gImplmentationHelper para declarar que es una extension
Para la primera parte es importante insertar los modulos JobExecutor, unohelper y uno.
import uno
import unohelper
from com.sun.star.task import XJobExecutor
Para el siguiente punto necesitamos una clase con la abstraccion de los componentes incluyendo el componente de escritorio, de aplicacion, de hoja y finalmente de celda.
class HelloWorldJob(unohelper.Base, XJobExecutor):
def __init__(self, ctx):
# store the component context for later use
self.ctx = ctx
def trigger(self, args):
# Retrieve the desktop object
desktop = self.ctx.ServiceManager.createInstanceWithContext("com.sun.star.frame.Desktop", self.ctx)
spreadsheet = desktop.getCurrentComponent()
sheets = spreadsheet.getSheets()
cell = sheets.getByIndex(0).getCellByPosition(0, 0)
if cell.getFormula():
cell.setFormula("Hello " + cell.getFormula())
else:
cell.setFormula("Hello world")
Este codigo tiene muchas similitudes con el codigo del tutorial pasado que se escribio en Python.com.mx. Aqui llamamos a los servicios de "Desktop", "CurrentComponent" pero a diferencia del procesador de texto en una hoja de calculo usamos getSheets(), y en vez de posicionarnos con el cursor lo hacemos por la celda con getCellByPosition().
Calc tiene sus propios servicios y metodos incluyendo aqui donde obtenemos la formula actual con getFormula() y setFormula().
Nota: Si solo pensamos poner texto tambien existe el setString().
La ultima parte de nuestro codigo es la razon por la cual llamamos a unohelper y a XJobExecutor. Esta es una parte predeterminada para poder correrlo como una extension.
g_ImplementationHelper = unohelper.ImplementationHelper()
g_ImplementationHelper.addImplementation( \
HelloWorldJob, # UNO clase de objeto
"org.openoffice.comp.pyuno.demo.HelloWorld", # Nombre de la implementacion
("com.sun.star.task.Job",),) # Lista de servicios implementados
En estas lineas podemos ver la declaraciones importantes que une nuestro script al XML que veremos mas adelante. La clase con el objeto que tiene la logica de la aplicacion, seguido del identificador de la implementacion, esta es algo arbitraria pero debe ser la misma presentada en el XML, finalmente el servicio de task.Job el cual implementara en el addImplementation().

