[RESUELTO] Path de plantilla Writer

Desarrollo de Macros y programación en UNO, usar las API, llamar programas externos...
Responder
Ambrosio
Mensajes: 24
Registrado: Lun Abr 23, 2018 6:33 pm

[RESUELTO] Path de plantilla Writer

Mensaje 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
Última edición por Ambrosio el Mar Oct 26, 2021 10:42 am, editado 1 vez en total.
windows 7 // LibreOffice_5.4.5_Win_x86
Ambrosio
Mensajes: 24
Registrado: Lun Abr 23, 2018 6:33 pm

Re: Path de plantilla Writer

Mensaje 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
windows 7 // LibreOffice_5.4.5_Win_x86
Neftali R
Mensajes: 169
Registrado: Mar Jun 15, 2021 12:48 pm
Ubicación: Venezuela

Re: Path de plantilla Writer

Mensaje 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
LibreOffice 7.2.6.2 | Windows 7 Ultimate
Ambrosio
Mensajes: 24
Registrado: Lun Abr 23, 2018 6:33 pm

Re: Path de plantilla Writer

Mensaje 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).
windows 7 // LibreOffice_5.4.5_Win_x86
Neftali R
Mensajes: 169
Registrado: Mar Jun 15, 2021 12:48 pm
Ubicación: Venezuela

Re: Path de plantilla Writer

Mensaje 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.
LibreOffice 7.2.6.2 | Windows 7 Ultimate
Ambrosio
Mensajes: 24
Registrado: Lun Abr 23, 2018 6:33 pm

Re: Path de plantilla Writer

Mensaje por Ambrosio »

Gracias, lo investigo
windows 7 // LibreOffice_5.4.5_Win_x86
Ambrosio
Mensajes: 24
Registrado: Lun Abr 23, 2018 6:33 pm

[RESUELTO] Re: Path de plantilla Writer

Mensaje 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
windows 7 // LibreOffice_5.4.5_Win_x86
Responder