[Gvsig_usuarios] Clases de OpenOffice desde el modulo scripting

Óscar Martínez masquesig en gmail.com
Lun Jun 1 19:30:28 CEST 2015


Buenas,

Te explico un pequeño intento que he realizado, no se si te valdrá esta 
forma.

Ha sido utilizando la librería jOpenDocument. Me he descargado, el .jar 
de la web: http://www.jopendocument.org/downloads.html

Aquí es donde alguno me podrá corregir y se puede importar el jar (no 
recuerdo ahora la forma perfecta de hacerlo el import, ya se mirará pero 
mientras esto funciona). Pero he descomprimido el jar en la carpeta:
C:\Users\Oscar\gvSIG\plugins\org.gvsig.scripting.app.extension\lib 
dejandolo de nombre /joo/ y dentro todo el contenido del jar.

Ahora nos vamos a Jython y podemos realizar un import joo que nos 
importará todo el contenido de la carpeta, permitiendonos trabajar con 
jopendocument. La Api la podemos encontrar en 
http://www.jopendocument.org/docs/

Adaptando el código a Jython de los ejemplos sobre Modificar una 
SpreadSheet http://www.jopendocument.org/start_spreadsheet_2.html

nos queda algo así:

from gvsig import *
from org.jopendocument.model import OpenDocument
import joo
from java.io import File
from org.jopendocument.dom.spreadsheet import SpreadSheet
from java.util import Date
from org.jopendocument.dom import OOUtils

def main(*args):
     file = File(r"C:/jOO/invoice.ods")
     sheet = SpreadSheet.createFromFile(file).getSheet(0)

     sheet.getCellAt("I10").setValue(Date())

     sheet.setValueAt("Filling test", 1, 1)
     sheet.getCellAt("B27").setValue("On site support")

     sheet.getCellAt("F24").setValue(301)

     sheet.getSpreadSheet().getTableModel("Products").setValueAt(1, 5, 4)

     outputFile = File("C:/jOO/fillingTest1.ods")
     OOUtils.open(sheet.getSpreadSheet().saveAs(outputFile))


Esto nos permite modificar las celdas que queramos sobre una existente.
  Los ficheros de ejemplo los he descargado de Templates 
http://www.jopendocument.org/downloads.html
y situado en la carpeta C:/jOO , esto lo podrás modificar en el código 
anterior por supuesto.

Me he fijado que al modificarlo se abre el sheet pero los valores de 
formulas no están actualizadas, hay que presionar MAYUS+CONTROL+F9 para 
recalcular. Grabas y listo.

Este caso es para celdas, pero también hay más ejemplos en la web.

Por ejemplo, si después utilizamos el siguiente script, podremos 
visualizar la plantilla en gvSIG en un visor


from gvsig import *
import joo
from joo.org.jopendocument import model
from org.jopendocument.model import OpenDocument
from org.jopendocument.print import DefaultDocumentPrinter
from org.jopendocument.panel import ODSViewerPanel
from javax.swing import JFrame

def main(*args):
     doc = OpenDocument()
     doc.loadFrom(r"C:/jOO/invoice.ods")


     mainFrame = JFrame("Viewer")
     printer = DefaultDocumentPrinter()

     viewerPanel = ODSViewerPanel(doc, printer, True)

     mainFrame.setContentPane(viewerPanel)
     mainFrame.pack()
     mainFrame.setLocation(10, 10)
     mainFrame.setVisible(True)

Espero que te sirva de ayuda, ya nos comentas si te vale como solución o 
si por lo que sea debes de utilizar otra librería

Un saludo,
Óscar Martínez

El 01/06/2015 a las 12:33, César Martínez Izquierdo escribió:
> Hola Javier,
>
> Nunca he usado nada parecido, pero se me ocurre una posible causa:
> aunque el lenguaje de scripting de gvSIG es Python, está basado en
> Jython (Python ejecutándose sobre Java), así que probablemente no
> debas importar las librerías de Python de OpenOffice sino las de Java.
>
> Para ello seguramente tendrás que añadir algunos jars al classpath de
> inicio de gvSIG (o meterlos de alguna forma como un plugin de gvSIG),
> y usar la API de Java de OpenOffice (aunque la llames desde Python, ya
> que desde el scripting de gvSIG se puede invocar a cualquier método de
> Java).
>
> Te digo todo esto sin conocer las interioridades de OpenOffice ni del
> funcionamiento de Jython. Creo que puedes empezar por buscar
> documentación sobre cómo usar OpenOffice desde Jython, esto te pondrá
> en la buena dirección.
>
> Si al final tienes éxito no te olvides de contar por aquí cómo lo conseguiste.
>
> Saludos,
>
> César
>
> 2015-06-01 12:13 GMT+02:00 Javier Galán <javiergalans en gmail.com>:
>> Hola a todos:
>>
>> Estoy intentando hacer informes a partir de consultas y datos que tengo
>> cargados en gvSIG.
>>
>> Para ella quería utilizar una plantilla en OO y poder modificarla en función
>> de los datos y consultas.
>>
>> Para ello desde el modulo de scripting estoy intentando importar las clases.
>>
>> Pero "import uno"  me retorna que no existe
>>
>> He añadido la ruta al path de librerías
>>
>>
>> import sys
>> sys.path.append('C:\Program Files (x86)\OpenOffice 4\program') ##ruta donde
>> esta instalado OO y está la libreria uno.py
>>
>> pero tambien acabadando error
>>
>> He copiado la librería al lib de gvsig, a ver si así la leía y me da el
>> siguiente error:
>>
>> import uno
>> Traceback (most recent call last):
>>    File "<input>", line 1, in <module>
>>    File
>> "C:\Users\PC-VALCAT17\gvSIG\plugins\org.gvsig.scripting.app.extension\lib\uno.py",
>> line 1, in <module>
>>      from com.sun.star.uno import UnoRuntime, AnyConverter
>> ImportError: No module named star.
>>
>> Alguien ha intentado algo parecido? Me podría guiar un poco?
>>
>> Muchas gracias.
>> Javier
>>
>>
>>
>>
>> _______________________________________________
>> gvSIG_usuarios mailing list
>> gvSIG_usuarios en listserv.gva.es
>>
>> Para ver histórico de mensajes, editar sus preferencias de usuario o darse
>> de baja en esta lista, acuda a la siguiente dirección:
>>
>> http://listserv.gva.es/cgi-bin/mailman/listinfo/gvsig_usuarios
>>
>
>



Más información sobre la lista de distribución gvSIG_usuarios