Página 1 de 1

[RESUELTO] Path de plantilla Writer

Publicado: Mié Oct 13, 2021 10:02 am
por Ambrosio
Hola,
Me encuentro con una situación paradójica. Aplico el código, que pongo a continuación, en el Writer v. 5.4.5.1 y en ordenadores distintos con Win 10, en uno (el mío) funciona y en otros no. El código es:

GlobalScope.BasicLibraries.LoadLibrary( "Tools" )
pathURL = ThisComponent.getDocumentProperties().TemplateURL
pathFiche = ConvertFromUrl(pathURL)
onde = DirectoryNameoutofPath(pathFiche, GetPathSeparator())

Cuando funciona obtengo la path de la plantilla del documento generado (dicha plantilla está en una carpeta distinta de la carpeta donde Libre Office guarda sus plantillas).
Cuando no funciona, aparece el siguiente mensaje de error:

<adjunto imagen>
"FileNameOutofPath = SetList(i)" - Tipo de datos inadmisible. El índice está fuera del intervalo definido

A qué puede deberse que no funcione?
Gracias por anticipado
Ambrosio

Re: Path de plantilla Writer

Publicado: Mié Oct 13, 2021 6:29 pm
por Ambrosio
Hola,

Acabo de darme cuenta de porqué funciona y porqué no. En el ordenador que funciona está declarada la ruta de la plantilla en las "Opciones" de Libre Office (no recordaba que la había introducido manualmente).
Hay manera de añadir una ruta (o path) en las Opciones de Libre Office desde OooBasic ?

Saludos,
Ambrosio

Re: Path de plantilla Writer

Publicado: Mié Oct 13, 2021 8:48 pm
por Neftali R
Eso es raro, mi configuración de Libre Office desde la instalación tiene varias rutas configuradas por defecto, entre ellas la de las plantillas, en Opciones>LibreOffice>Rutas.

Sin embargo, yo uso LibreOffice 6.3.2.2

Re: Path de plantilla Writer

Publicado: Jue Oct 14, 2021 9:00 am
por Ambrosio
Hola,
Yo facilito una carpeta que contiene una plantilla del Writer con funciones especiales, algunas de las cuales dependen de otros ficheros ejecutables que están dentro de la carpeta.
Al ejecutar la plantilla se abre un documento nuevo, basado en mi plantilla, pero que se situa temporalmente en la carpeta "Mis documentos" . Para que funcionen ciertas funciones en el documento necesito saber dónde ha copiado el usuario la carpeta donde está mi plantilla (para que se ejecuten correctamente los otros ficheros ejecutables).
Sólo he encontrado la solución manual. Es decir, dar instrucciones al usuario para que añada manualmente la ruta de esa carpeta en Opciones | Rutas | Plantillas

Mi interès sería facilitar un proceso automático que evitara al usuario tener que hacerlo manualmente (además daría autonomía al usuario para poder cambiar la carpeta de ubicación).

Re: Path de plantilla Writer

Publicado: Vie Oct 15, 2021 12:28 pm
por Neftali R
No estoy 100% seguro de esto, pero creo que el código que está en el primer post obtiene la ruta de la platilla en el archivo, no de las configuraciones.


Te explico, si cambias el .odt por un .zip y lo abres, en el archivo "meta.xml", una de las últimas etiquetas es la etiqueta "<meta:template xlink:type=......./> y es por esa etiqueta la que le dice al archivo que es hijo de una platilla y no un archivo independiente.

Pero la verdad no sé si esta información te será útil o no.

Re: Path de plantilla Writer

Publicado: Vie Oct 22, 2021 8:52 am
por Ambrosio
Gracias, lo investigo

[RESUELTO] Re: Path de plantilla Writer

Publicado: Dom Oct 24, 2021 12:23 pm
por Ambrosio
Hola,

Finalmente he podido entender que Libre Office no trata las plantillas como a los ficheros de programas del Libre Office. Así que no he usado los comandos de "Tools".

He optado por hacerlo así:
1- Primero abro un documento '.ODT' (que está en la misma carpeta que la plantilla), con una macro AutoOpen que añade la path a las rutas de plantillas del Libre Office y, haciendo que espere un poco, cierra ese documento (en ese proceso también se crea un icono para acceder directamente a la plantilla). Co el siguiente código se puede añadir más path a las Rutas de las plantillas:

Dim oPathSettings
oPathSettings = CreateUNOService( "com.sun.star.util.PathSettings" )

2- Después, cuando se abren documentos haciendo doble clic en el icono de la pantalla (o en el fichero de la plantilla directamente), he hecho un código que busca en la cadena de las rutas de las plantillas del Libre Office en ese ordenador el 'nombre de mi carpeta'

Dim i As Integer, j as Integer, onde As String
i= InStr(1,oPathSettings.Template,"nombreCarpeta",1)

Con eso obtengo la posición del primer carácter del nombre de la carpeta dentro de la cadena de las Rutas de las plantillas
Después busco hacia atrás en oPathSettings.Template (este paso costó porque el comando de VSBasic usado no es compatible, si no se explicita al inicio del módulo 'Option VBASupport 1')

j= InStrRev(oPathSettings.Template,"///",i,1) 'cada carpeta dentro de la path en URL està precedida de '///'

i= (i + 9) - (segunda +3) 'el nombre de mi carpeta tiene 9 caracteres

onde = Mid(oPathSettings.Template,(segunda + 3),i)

Ha costado un poco, pero ya funciona en cualquier ordenador.

Gracias por tu interés
Ambrosio