Página 1 de 1

[RESUELTO]Writer-Obtener valor de campo de comb. desde macro

Publicado: Lun Jul 06, 2020 8:55 am
por keko
Buenos días.

Me gustaría saber si es posible obtener desde una macro el valor de un campo de combinación.
Me explico: Tengo un documento de WRITER desde el que obtengo dos escritos que utilizan los mismos datos extraidos de una base de datos BASE. Yo meto los datos en BASE, y luego abro este documento y ya tengo los escritos hechos. Luego tengo que extraerlos a dos PDFs (por un lado la página 1 y por otro las páginas 2 y 3) para firmarlos electrónicamente.
Uno de los campos de combinación es un número de referencia que debe estar en el nombre del pdf.
He hecho una macro que directamente me saca esos pdfs al pulsan un botón y me pide que introduzca el número de referencia para ponerlo en el nombre de los pdfs.
Me preguntaba, puesto que ese número de referencia está en el documento de WRITER, si sería posible obtenerlo directamente desde la macro sin preguntar al usuario, de forma que el proceso quedara automatizado del todo.

Adjunto documento de prueba.

La macro es:

Código: Seleccionar todo

Sub ExportarPDFs
	Dim args(1) as new com.sun.star.beans.PropertyValue
	Dim FilterArg(1) as new com.sun.star.beans.PropertyValue
	Dim p as String
	
	p = InputBox("Introduzca expediente", "Expediente",)
	
	args(0).Name = "FilterName"
	args(0).Value = "writer_pdf_Export"
	FilterArg(0).Name = "PageRange"
	FilterArg(0).Value = "1"
	FilterArg(1).Name = "SelectPdfVersion"
	FilterArg(1).Value = 1
	args(1).Name = "FilterData" 
	args(1).Value = FilterArg
	
	ThisComponent.storeToURL(ConvertToUrl("c:\users\prueba\Desktop\Correo\" & p & " - carta1.pdf"),args())
	
	FilterArg(0).Name = "PageRange"
	FilterArg(0).Value = "2,3"
	FilterArg(1).Name = "SelectPdfVersion"
	FilterArg(1).Value = 1
	args(1).Name = "FilterData" 
	args(1).Value = FilterArg
	
	ThisComponent.storeToURL(ConvertToUrl("c:\users\prueba\Desktop\Correo\" & p & " - carta2.pdf"),args())
	
End sub
Gracias por su ayuda.
Un saludo.

Re: Writer - Obtener valor de campo de combinación desde mac

Publicado: Jue Jul 09, 2020 11:57 am
por PepeOooSevilla
Hola.
Crea un campo referencia que incluya todo el campo que quieres "rescatar" (ver imagen). En tu archivo ejemplo lo he llamado "NUM_REFERENCIA". Puedes verlo en Insertar > Campo > Más campos ... > Referencias cruzadas. Supongo que habrá otras formas de hacerlo pero esta es la que yo conozco.

Código: Seleccionar todo

Sub Prueba()
	Dim Texto As String
	Dim p As String
	
	p = ContenidoReferencia()
	Texto = "c:\users\prueba\Desktop\Correo\" & p & " - carta1.pdf"
	MsgBox Texto
End Sub

Function ContenidoReferencia() As String
	Dim Campos As Object
	Dim CampoReferencia As Object
	Dim s As String
	
	Campos = ThisComponent.getTextFields().createEnumeration()
	Do While Campos.hasMoreElements()
		CampoReferencia = Campos.nextElement()
		If CampoReferencia.supportsService("com.sun.star.text.TextField.GetReference") Then
			ContenidoReferencia = CampoReferencia.CurrentPresentation()
			Exit Do
		End If
	Loop
End Function

Sub ExportarPDFs
	Dim args(1) as new com.sun.star.beans.PropertyValue
	Dim FilterArg(1) as new com.sun.star.beans.PropertyValue
	Dim p as String
	
	'p = InputBox("Introduzca expediente", "Expediente",)
	'*** Se llama a la función que devuelve el contenido de la referencia creada ***
	p = ContenidoReferencia()
	
	args(0).Name = "FilterName"
	args(0).Value = "writer_pdf_Export"
	FilterArg(0).Name = "PageRange"
	FilterArg(0).Value = "1"
	FilterArg(1).Name = "SelectPdfVersion"
	FilterArg(1).Value = 1
	args(1).Name = "FilterData" 
	args(1).Value = FilterArg
	
	ThisComponent.storeToURL(ConvertToUrl("c:\users\prueba\Desktop\Correo\" & p & " - carta1.pdf"),args())
	
	FilterArg(0).Name = "PageRange"
	FilterArg(0).Value = "2,3"
	FilterArg(1).Name = "SelectPdfVersion"
	FilterArg(1).Value = 1
	args(1).Name = "FilterData" 
	args(1).Value = FilterArg
	
	ThisComponent.storeToURL(ConvertToUrl("c:\users\prueba\Desktop\Correo\" & p & " - carta2.pdf"),args())
	
End sub
Haz pruebas ...
Saludos cordiales.

Re: [RESUELTO]Writer-Obtener valor de campo de comb. desde m

Publicado: Lun Jul 13, 2020 11:14 am
por keko
Funciona perfectamente. Me llevó un rato darme cuenta de que no bastaba con establecer la referencia, sinó que también tenía que insertarla en otro sitio para que la función la encontrara :roll:
Es una solución muy creativa.

Muchas gracias PepeOooSevilla!

Un saludo.