Abrir aplicacion Writer y documento por separado.

Desarrollo de Macros y programación en UNO, usar las API, llamar programas externos...
Avatar de Usuario
JoePublic
Mensajes: 36
Registrado: Dom Sep 06, 2020 5:34 pm

Abrir aplicacion Writer y documento por separado.

Mensaje por JoePublic »

Tema : Referenciar la aplicacion Writer (libreoffice) como objeto y documento o plantilla de writer como objeto de forma separada, para luego cerrarlos de forma en diferentes momentos del macro.

Hola,
Estoy buscando una MACRO que realice lo siguiente:
Tengo una tabla en Calc y quiero imprimir un informe con los datos de la tabla, de modo que genere un informe con Writer por cada fila que tenga la tabla de Calc.

Aunque parezca algo muy complicado o largo, la macro YA LA DESARROLLÉ Y FUNCIONA, pero solo necesito una tontería. Por favor siga leyendo.

La solución debe ser muy facil, pero al ser novato, no encuentro el modo identificar y referenciar a la aplicacion Writer por un lado y a la plantilla que abro como documento por otro.
Me falta los puntos 1, 2 y apartados A y B. (Mire la funcion que adjunto 'AbriendoDocsWriterPlantilla' ya que con alguna simple modificacon de esta función se resolverá el punto B)

1-Necesito primero saber si Writer esta abierto o no, es decir, si esta rodando o no.
1-Si esta cerrado Writer
A-Abrir Writer y referenciar una variable objeto a la aplicacion Writer.
B-Luego abrir una plantilla (documento) de Writer, y referenciar este documento a una variable objeto.
*Para luego entrar en un bucle y fusionar los datos y grabar el documento. (*Este macro del bucle y fusion de datos lo tengo)
C-Por ultimo necesito cerrar SOLO EL DOCUMENTO y no la aplicacion Writer.
2-Si esta abierto
B-Abrir una plantilla (documento) de Writer, y referenciar este documento a una variable objeto.
*Para luego entrar en un bucle y fusionar los datos y grabar el documento. (*Este macro del bucle y fusion de datos lo tengo)
C-Por último necesito cerrar SOLO EL DOCUMENTO y no la aplicacion Writer.
3-Finalmente cerrar la aplicacion Writer.

La función 'AbriendoDocsWriterPlantilla' Abre una plantilla en Writer y referencia a Writer y a la plantilla todo en un mismo objeto y al cerrar ese objeto, se cierra Writer también y constantemente mi macro, abre y cierra instancias de Writer y eso lleva mucho tiempo. (Vease la funcion aqui abajo)

Código: Seleccionar todo


Sub AbreDoc
Dim Documento1 as Object 'Documento de Writer
Dim Directorio as String
Dim RutaDoc as String

Directorio = FileDirectory()
NomDocument = "30-Notif PEI Covid19 Decre60.ott"
RutaDoc = Directorio & "\PlantillasLibo\Pei\" & NomDocument

'Aqui iría la funcion que identifica si Writer esta abierto o no.
For Fila = 1 to 10
if Writer_esta_cerrado
	Abre writer.
	'a) Luego se abre plantilla.
	Documento1 = AbriendoDocsWriterPlantilla (RutaDoc)
	Call ReplaceTextWriterArrays(Documento1, NombreColumnas(), ArrayValoresFila())'Remmplaza Texto en Writer
	'Luego se graba el documento generado y lo cierra pero Writer sigue abierto.
	call SaveDocODT(Documento1, RutaGrabaDoc)
	Call CloseDocument(Documento1)
if Writer_esta_abierto
	'Se abre la plantilla
	'Luego se abre plantilla.
	Documento1 = AbriendoDocsWriterPlantilla (RutaDoc)
	Call ReplaceTextWriterArrays(Documento1, NombreColumnas(), ArrayValoresFila())'Remmplaza Texto en Writer
	'Luego se graba el documento generado y lo cierra pero Writer sigue abierto.
	call SaveDocODT(Documento1, RutaGrabaDoc)
	Call CloseDocument(Documento1)
End if
Next Fila
'Luego se cierra Writer.
End Sub


Function AbriendoDocsWriterPlantilla(FileDirectoryToOpen as String)
'Abre documento plantilla OTT al pasarle la ruta y asigna objeto a variable.
Dim sRuta As String
Dim mOpciones(0) As New "com.sun.star.beans.PropertyValue"
Dim DocumentObjeto As Object

	mOpciones(0).Name = "AsTemplate"
	mOpciones(0).Value = True 'Con True, abrirá una copia aunque no sea plantilla. Con False lo editaremos.
	
	sRuta = ConvertToUrl( FileDirectoryToOpen )
	DocumentObjeto = StarDesktop.loadComponentFromURL( sRuta, "_blank", 0, mOpciones() )
	
AbriendoDocsWriterPlantilla = DocumentObjeto
End Function

Usuario apasionado de las hojas de cálculo. Novato aprendiz de macros con OOo Basic y VBA.
LibreOffice Version: 6.4.3.2 (x64) y Sistema Operativo Windows 10 Home.
Responder