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

Desarrollo de Macros y programación en UNO, usar las API, llamar programas externos...
Responder
keko
Mensajes: 5
Registrado: Mié Mar 15, 2017 9:19 am

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

Mensaje 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.
Adjuntos
prueba.odt
(42 KiB) Descargado 227 veces
Última edición por keko el Lun Jul 13, 2020 11:10 am, editado 1 vez en total.
Libreoffice 4.2.6.3 / Windows 10
Avatar de Usuario
PepeOooSevilla
Mensajes: 1480
Registrado: Sab Abr 04, 2009 6:10 pm
Ubicación: Sevilla (España)

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

Mensaje 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.
Adjuntos
Insertar_Campo_Referencia.png
prueba_keko.odt
(42.19 KiB) Descargado 223 veces
LibreOffice 6.4.6. Windows 10. Java 8 rev. 261 (64 bits)
Por favor, utiliza el Foro para tus consultas, no los mensajes privados
Si usas OpenOffice/LibreOffice trabaja y guarda en ODT, ODS, ODP, ... Y haz copias de seguridad.
keko
Mensajes: 5
Registrado: Mié Mar 15, 2017 9:19 am

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

Mensaje 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.
Libreoffice 4.2.6.3 / Windows 10
Responder