Editando Hojas de Cálculo desde gvSIG Scripting para generar informes

Siguiendo la temática de la semana pasada sobre “Automatizar la generación de informes en gvSIG mediante Scripting“, vamos a explicar cómo podemos hacer lo mismo pero utilizando como plantilla un fichero de hoja de cálculo (ODS).

En el anterior post explicábamos como instalar la librería jOpendocument y cómo descargar todo el material necesario para la ejecución del script.

Para este ejemplo solo vamos a necesitar el fichero que se encuentra en: C:\gvsig_informes\plantilla_invoice.ods.  No es necesario que tengamos ninguna capa cargada en gvSIG.

Si utilizamos Linux o descargamos la carpeta en otro lugar de nuestro disco, tan solo deberemos de cambiar la ruta en el script que hace referencia a la plantilla de la hoja de cálculo: pathTemplate. Hay dos, una para el fichero de entrada plantilla_invoice.ods, y otra para el fichero de salida que podemos establecerlo donde queramos.

El siguiente script utiliza la librería jOpendocument para modificar el fichero ODS, asignándole a las celdas que queremos los valores deseados. Estos valores podrían provenir directamente de información de nuestras capas como explicamos en el post anterior.

La plantilla está basada en la utilizada en la documentación de jOpendocument. Este script está basado en el ejemplo sobre modificar una hoja de cálculo existente, pero también hay más, por ejemplo, para la creación de una hoja de cálculo nueva.

Al ejecutarse el script correctamente, se nos abre LibreOffice con el fichero creado. Si es como este caso que la hoja de cálculo influye fórmulas (sumas, multiplicaciones, etc), deberemos de presionar dentro de LibreOffice los botones Control+Mayúsculas+F9. Esto hará que se refresquen y actualicen todos los cálculos de la tabla. Veremos que se modifican algunas celdas.

El resultado sería un fichero similar a este:

2015-10-05 15_57_38-fillingTest1.ods - LibreOffice Calc

El código es el siguiente, tan solo deberás de comprobar que las rutas sean correctas:

from gvsig import *

from java.io import File
from java.util import Date

from org.jopendocument.model import OpenDocument
from org.jopendocument.dom.spreadsheet import SpreadSheet
from org.jopendocument.dom import OOUtils

def main(*args):
    #Ejemplo de Edicion de ficheros ODS con jOpenDocument
    
    #basado en http://www.jopendocument.org/start_spreadsheet_2.html
    #ficheros plantilla http://www.jopendocument.org/downloads.html

    pathTemplate = r"C:/gvsig_informes/plantilla_invoice.ods"
    pathOutput = r"C:/gvsig_informes/resultado/fillingTest1.ods"

    #Acceso al spreadsheet y numero de hoja
    file = File(pathTemplate)
    sheet = SpreadSheet.createFromFile(file).getSheet(0)

    #Establecer fecha actual a la castilla I10
    sheet.getCellAt("I10").setValue(Date())

    #Titulo
    sheet.getCellAt("B21").setValue("Pedido n. 01")
    
    #Modifica el valor a la celda 1,1. Seria B2
    sheet.setValueAt("Presupuesto parcela n. 1", 1, 1)

    #Varias modificaciones a las celdas
    sheet.getCellAt("F24").setValue(123)
    
    sheet.getCellAt("B27").setValue("Personal")
    sheet.getCellAt("H27").setValue(2)
    sheet.getSpreadSheet().getTableModel("Products").setValueAt(10, 5, 4) #F27

    #Guardamos fichero
    outputFile = File(pathOutput)
    OOUtils.open(sheet.getSpreadSheet().saveAs(outputFile))

Espero que os sea de utilidad este post para la generación de informes y para mostrar la potencia de gvSIG Scripting al ampliarlo con librerías externas.

Cualquier duda nos podéis comentar en el post o en las listas.
Un saludo,
Óscar

This entry was posted in development, gvSIG development, scripting. Bookmark the permalink.

4 Responses to Editando Hojas de Cálculo desde gvSIG Scripting para generar informes

  1. juampy says:

    Hola Oscar lo he probado y me salta error en esta linea:
    sheet.getSpreadSheet().getTableModel(“Products”).setValueAt(10, 5, 4) #F27
    la he comentado y de esa manera me ha funcionado bien.

    • Buenas,

      No me apareció ningún error en ninguna de esas líneas, de todas formas quedándonos en los básicos, las otras líneas que hacen una función similar (acceder a una celda y modificar el valor) te funcionan, curioso.

      ¿Qué versión de gvSIG, jOpendocument y LibreOffice utilizas?

      Estaremos atentos si le pasa a algún otro usuario.

      • juampy says:

        Uso gvSIG 2.2.02313, jOpendocument 1.3 y OpenOffice 4.1.1 ya voy a probar con libre office pero es raro.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s