Trabajo con documentos: crear, abrir y cerrar
Lo primero que aprenderemos es a trabajar con documentos Presentación y Dibujo, esto es: a crear, abrir, guardar y cerrar uno de estos documentos mediante OOo Basic. Son aprendizajes comunes a cualquier otro servicio y algunos de ellos no presentan gran interés desde el punto de vista del uso que vamos a hacer de ellos, pero no nos vendrá mal su aprendizaje en el futuro; alguna utilidad le podremos dar.
Aprender a crear una presentación o un dibujo directamente, mediante OOo Basic no nos reporta una utilidad inmediata ya que no son archivos de los que vayamos a hacer un uso que pueda hacer útil este aprendizaje, pero conviene saberlo por lo que este código comparte con el uso de otros servicios.
Mauricio Baeza nos proporciona las claves para generar estos script que asociaremos a un archivo Writer desde el supuesto del uso de una presentación y/o una imagen como documento auxiliar en un proceso instruccional o de evaluación que se ilustra o soporta sobre este tipo de documentación auxiliar. Es por ello mismo que aprender a crear documentos de esta naturaleza carece de utilidad, pero nos dará una pista para otro tipo de usos, como veremos a continuación.
Sub Crear_PresentaDim sRuta As StringDim mArg()Dim oNuevaPresentacion As ObjectsRuta = "private:factory/simpress"oNuevaPresentacion = StarDesktop.loadComponentFromURL( sRuta, "_default", 0, mArg() )End Sub
Este script puede considerarse modelo de script para la creación de cualquier otro tipo de documento, por lo que me ahorro exponer el correspondiente para Draw. De hecho es suficiente con cambiar el servicio que se solicita desde la variable sRuta para generar el documento correspondiente:
- scalc para hojas de cálculo.
- swriter para documentos de texto.
- simpress para presentaciones.
- sdraw para dibujos.
- smath para documentos Math.
Ya dije que estos documentos vacíos nos sirven de bien poco, pero crear un documento de texto o una hoja de cálculo puede sernos de gran utilidad, así que bien está saber cómo crearlos.
Veamos ahora cómo acceder a un documento (presentación o dibujo ya creado), ya que este conocimiento sí puede sernos de gran utilidad en el planteamiento que realizamos antes: el dibujo o la presentación son, dentro de un docap complejo, recursos que utilizamos para presentar una información al usuario.
Sigo usando el documento de texto como base, pero ahora necesito que nuestros materiales gráficos ya estén creados de antemano y, para mayor comodidad, los supongo ubicados en la unidad D:
Sub Abrir_PresentaDim sRuta As StringDim mArg()Dim oPresenta As ObjectsRuta = ConvertToUrl( "D:/PresentaPrueba.odp" )oPresenta = StarDesktop.loadComponentFromURL( sRuta, "_blank", 0, mArg() )
End Sub
Mediante este script accedo al archivo presentación (extensión .odp) ubicado en el directorio raíz de la unidad D llamado PresentaPrueba. Podrá suponer que puedo seguir el mismo procedimiento para acceder a un archivo imagen, Calc o documento: es suficiente con cambiar el nombre (y al extensión) del archivo.
Esto quiere decir que también en este caso estamos hablando de un procedimiento generalizable, que podremos utilizar con cualquier documento que sea accesible a LibreOffice, como por ejemplo, un .pdf, aunque en este caso se abre para ser gestionado por Draw, ya que LibreOffice lo interpreta como archivo de imagen. Igual sucede si lo intentamos con un archivo .txt : en este caso es abierto desde el servicio Writer, ya que LibreOffice lo interpreta y asocia a un documento de texto.
De todas formas, lo importante de este script es entender la función que asociamos a la variable sRuta: la función ConvertToUrl(), que es la encargada de convertir a dirección absoluta, la dirección que introduzcamos entre sus paréntesis, siendo esta conversión necesaria para el funcionamiento del script por la naturaleza multiplataforma de LibreOffice.
El script anterior podemos hacerlo interactivo introduciendo una variable o una serie de variables que nos permitan dar al programa la información necesaria. Este podría ser un ejemplo, aunque un tanto simple.
Sub Abrir_InteractivoDim sRuta As String, sUnidad As String, sNombreArchivo As String,
Dim sTipoArchivo As String, sExtension As String, sDireccion As String
Dim mArg()Dim oDocInteractivo As ObjectsUnidad = InputBox ("Unidad donde se encuentra el archivo")sNombreArchivo = InputBox ("Nombre del archivo")sTipoArchivo = InputBox ("Tipo de documento:")If sTipoArchivo = "Impress" ThensExtension = ".odp"ElseIf sTipoArchivo = "Draw" ThensExtension = ".odg"End IfsDireccion = sUnidad & ":/" & sNombreArchivo & sExtensionsRuta = ConvertToUrl( sDireccion )oDocInteractivo = StarDesktop.loadComponentFromURL( sRuta, "_blank", 0, mArg() )End Sub
Esta funcionalidad no es de mucho interés para el planteamiento de docap que tenemos en mente, pero podría serlo para otros.
Lo que también podemos derivar del análisis de los script anteriores es la posibilidad de crear una función o una subrutina que agilice el procedimiento, algo que resulta de utilidad para mejorar la formalización del código y que redunda en su funcionalidad si debemos reutilizar dicha función.
Function AbrirCualquierDoc(cRuta As String,Optional aOpciones()) As ObjectcRuta = ConvertToURL(cRuta)If IsMissing (aOpciones) Then aOpciones = Array()AbrirCualquierDoc = StarDesktop.LoadComponentFromURL(cRuta,"_blank",0, aOpciones())End FunctionSub AbrirDocPresentaDim sDocum As StringsDocum = "D:/PresentaPrueba.odp"AbrirCualquierDoc(sDocum)End Sub
Gracias a esta función, es suficiente con dar el contenido requerido a la variable sDocum para que podamos acceder a cualquier tipo de archivo, con las condiciones y las opciones de interactividad que vimos antes.
Esta forma de trabajar nos permite dar un paso más en el acceso a documentos que presenten características específicas, lo que nos será de mucha utilidad. Dos ejemplos de ello, que no los únicos, son los siguientes:
- Cuando el archivo (una presentación, por ejemplo) contiene macros
- Y cuando queremos que la presentación se lance directamente.
Para ello daremos contenido al parámetro aOpciones declarado como opcional en la definición de la función y que ahora incluiremos en el script desde el que llamamos a la función.
Sub AbrirPresentaConMacrosDim sDocum As StringDim aOpc(0) As New "com.sun.star.beans.PropertyValue"sDocum = "D:/PresentaPruebaSegunda.odp"aOpc(0).Name = "MacroExecutionMode"aOpc(0).Value = 4AbrirCualquierDoc(sDocum,aOpc)End Sub
Este script nos permite acceder a la presentación indicada en sDocum y activar sus macros directamente. Esto es posible por el uso de la variable aOpc que llama al método com.sun.star.beans.PropertyValue, el cual, a su vez está conformado por una matriz de componentes Nombre-Valor que pueden ser usados simultáneamente siempre que no entren en contradicción entre sí.
Un ejemplo de uso simultáneo es el de abrir una presentación con macros y lanzarla directamente. El script que sigue al que acabo de exponer cumple ambos requisitos. Puedes acceder a él desde el documento que te dejo en uno de los enlaces al final de esta entrada.
Fíjate en que este caso, la función cumple la condición de SÍ presentar el argumento opcional aOpciones. Al haber sido definido de este modo y ser tratado mediante el condicional If, esta función nos sirve tanto para trabajar con script que no especifican propiedades específicas del documento como los que sí.
Para finalizar esta entrada, vamos a crear un script un tanto absurdo, pero que responde a una necesidad muy real: cerrar un documento previamente abierto. Lo absurdo deriva del modo de implementar estas funciones (guardar y cerrar), pero no de las funciones en sí, que pueden ser empleadas de forma mucho más lógica y funcional.
Sub AbrirCerrarDocum
Dim sRuta As String
Dim mOpciones(0) As New "com.sun.star.beans.PropertyValue"
Dim oDoc As Object
sRuta = ConvertToUrl( "D:/PresentaPrueba.odp" )
oDoc = StarDesktop.loadComponentFromURL( sRuta, "_blank", 0, mOpciones() )
'AQUI va todo el código que necesitemos para modificar el archivo abierto
MsgBox "Archivo abierto y modificado correctamente, presione Aceptar para guardar y cerrar"
'Guardamos los cambios
oDoc.store()
'Cerramos el archivo
oDoc.close(True)
End Sub
Las instrucciones claves (funciones, en realidad) son store(), que guarda los cambios realizados en el documento abierto) y close(), que lo cierra.
Si las utilizamos como se plantea en este script carecen de funcionalidad, ya que no nos es posible realizar cambio alguno en el archivo abierto (y ello por varios motivos, pero no vienen a cuento ahora), pero si las incorporamos a un script del documento (la presentación abierta desde el script "principal") podremos trabajar con la presentación (por ejemplo) y cerrarla guardando los cambios que deriven de su uso.
Pero esto queda para futuros script. Por ahora ya tenemos más que suficiente, así que, para finalizar de dejo acceso a los documentos creados para ilustrar las funcionalidades trabajadas en esta entrada. La mayoría son únicamente necesarios en función de esta utilidad, pero el principal contiene en su IDE todos los script que hemos ido viendo a lo largo de esta entrada.
- Guia.odt (documento principal creado sobre Writer)
- Documentos auxiliares:
- Documentos Impress: Presentación 1 y Presentación 2
- Documento Draw Dibujo 1
- Documento auxiliar .pdf
- Documento auxiliar .txt
No hay comentarios:
Publicar un comentario
Comenta esta entrada