viernes, 1 de septiembre de 2023

Procedimientos. Datos.

Calc. Crear y acceder a un libro

En esta entrada explicaré cómo crear un nuevo libro (y acceder a uno ya creado) desde otro libro Calc que sirve a modo de gestor.


puede que a alguien se le ocurra plantear que antes de aventurarse por estos derroteros no estaría de más responder a una pregunta muy simple pero fundamental: ¿para qué?.

Realmente es fácil dejarse llevar por la magia de la programación y abordar este objetivo sin reflexionar en su potencial interés y/o utilidad, pero aquí no estamos principalmente para aprender a programar (iba a decir para perder el tiempo, pero no sería ni justo ni exacto) , así que primero deberemos responder a una pregunta tan simple como pertinente.

Crear un libro Calc desde otro que previamente ha tenido que ser creado, suena a algo así como llevar agua a la fuente, pero no lo es necesariamente. Tal vez si digo crear un documento Writer desde un libro Calc, el tema empiece a ponerse un poco más  interesante.

Crear un documento Writer desde Calc suena a posibilidades: posibilidades de desarrollar una ficha de recogida de datos, un informe de actuaciones, el documento-base de un acta, un informe personalizado de los resultados de la aplicación de una prueba... Esto es, se nos abre un mundo de posibilidades pensando en la combinación de la sencillez del uso de formularios en Calc con la redacción de un documento en Writer... una vez, claro está, que sabemos cómo crear y trabajar con un formulario en Calc y cómo crear un texto en Writer desde un script.

Pues bien, según en qué circunstancias y condiciones, crear un libro Calc con funciones similares a lo que supone crear un documento Writer puede ser una solución tanto o más interesante que utilizar Writer como servicio complementario. Esto es así por las funcionalidades que tiene Calc en el manejo de datos, tanto en lo referente a la dimensión formal como al tratamiento de datos mediante funciones y su representación gráfica. Cierto que para algunas de ellas (de las posibilidades anteriores) deberemos trabajar con libros previamente diseñados con determinados fines, no con libros en blanco, pero para otras, e incluso para el tratamiento masivo de datos desde otras aplicaciones, crear y trabajar con esos documentos en blanco, "formateados" mediante código en el momento de su creación, puede ser suficiente, cuando no una solución más eficiente (aunque sólo sea por el ahorro de trabajo previo).

Algunos ejemplos de la utilidad del trabajo sobre Calc desde Calc podría ser lo que se presenta ahora (aunque también como opción de continuidad) como soporte para la recogida de datos sobre la aplicación de pruebas: en este caso, la propuesta que supone esta estrategia (Calc desde Calc) es diferenciar la fase recogida y tratamiento de datos de la fase archivo de resultados. Optar por Calc en lugar de Writer es dejar abierta la posibilidad de un posterior trabajo (potencialmente sistematizado además) con esos datos, en lugar de una "mera" exposición de resultados como representa la opción Writer, por más que deje abierta (lo que no es poco) la posibilidad de perfilar el análisis necesariamente estandarizado que implica la creación de ese documento mediante código.

Otra aplicación puede ser la de diferenciar la fase de recogida y tratamiento de datos en un proceso de análisis grupal de resultados y la elaboración de una síntesis individual, formalizada en formato ficha, evitando recargar el documento originario con multitud de síntesis individuales, algo que, aunque parezca funcional, si el número de estas fichas es elevado, termina siendo muy poco manejable y el archivo excesivamente pesado.

Contestada, espero que convenientemente, la pregunta nada baladí del inicio, paso ahora a explicar el cómo, aunque la respuesta es muy simple y un ejemplo (de Mauricio Baeza) mucho más ilustrativo que una larga explicación:

Sub CrearLibroNuevo

Dim sRuta As String

Dim mArg()

Dim oNuevoLibro As Object

sRuta = "private:factory/scalc"

oNuevoLibro = StarDesktop.loadComponentFromURL( sRuta, "_default", 0, mArg() )

End Sub

Viene a decir el autor (Mauricio) que el método  loadComponentFromURL es el responsable de la creación de nuevos documentos, además de cualquier servicio L.O. (excepto de base de datos), siendo suficiente con especificar qué servicio en la fórmula private:factory/scalc, donde scalc se puede sustituir por swriter, simpress o sdraw

El método loadComponentFromURL pertenece, a su vez, al servicio com.sun.star.frame.XComponentLoader, que se resume como StarDesktop para facilitar la sintaxis de la expresión.

A partir de aquí podremos trabajar con este nuevo documento creado (vg., nuestro nuevo libro Calc), cosa que plantearemos en entradas posteriores.

Si nuestra opción es utilizar un libro Calc (o cualquier otro documento) creado con una función específica (ya anticipamos antes esta posibilidad) a modo de modelo (algo similar a lo que hicimos en entradas anteriores con una hoja-modelo), entonces deberemos recurrir a un procedimiento similar al empleado para crear un documento nuevo, pero sustituyendo la formulación de la asignación a la variables sRuta:

  • En vez de  sRuta = "private:factory/scalc" (que crea un nuevo archivo Calc)
  • ... usaremos sRuta = ConvertToUrl("NombreDeLaRutayElArchivoConExptensión" )
... con lo que el script queda como sigue (basado también en Mauricio Baeza):

Sub AbrirLibro

Dim sRuta As String

Dim mArg()

Dim oDocumento As Object

sRuta = ConvertToUrl( "TuRutaTuArchivo" )

oDocumento = StarDesktop.loadComponentFromURL( sRuta, "_blank", 0, mArg() )

End Sub

NOTA

Para entender o recordar el uso de directorios y rutas te sugiero que revises [esta entrada].

No hay comentarios:

Publicar un comentario

Comenta esta entrada