Página 1 de 1

[RESUELTO]Macro Cabecera

Publicado: Jue Jul 21, 2011 12:12 pm
por Visente
Hola! Buenas soy nuevo en esto del OOo Basic y la verdad es que estoy algo perdido, a ver si alguien me puede ayudar, estoy intentando hacer una macro para personalizar la cabecera , lo que quiero es que cuando le des a la macro te aparezcan unas listas y lo que selecciones (que seran textos e imagenes) se inserte en la cabecera.

Mis preguntas son :

1ª ¿Como personalizo solo la letra(el estilo) del la cabecera sin afectar a la letra del resto del documento.?

2ª ¿Como se inserta una imagen en la cabecera?


Muchas Gracias de antemano.

Re: Macro Cabecera

Publicado: Jue Jul 21, 2011 8:18 pm
por mauricio
Hola...

¿Sobre que aplicación quieres hacer esto (Writer, Calc)?

Saludos

Re: Macro Cabecera

Publicado: Vie Jul 22, 2011 10:38 am
por Visente
Sobre Writer , perdon por no aclararlo antes. :(

Re: Macro Cabecera

Publicado: Lun Jul 25, 2011 7:10 pm
por FJCC-ES
Ejemplos de código para cambiar el estilo de la cabecera y insertar una imagen:

Modificar el estilo "Encabezamiento"

Código: Seleccionar todo

oFam_Estilos = ThisComponent.StyleFamilies
oEstilos_Para = oFam_Estilos.getByName("ParagraphStyles")
oEstilo_Encab = oEstilos_Para.getByName("Header")
oEstilo_Encab.CharFontName = "Arial"
Cambiar la fuente directamente

Código: Seleccionar todo

oFam_Estilos = ThisComponent.StyleFamilies
oEstilos_Pagina = oFam_Estilos.getByName("PageStyles")
oEstilo_Prede = oEstilos_Pagina.getByName("Standard")
oHeaderText = oEstilo_Prede.HeaderText
Enum_Paraf = oHeaderText.createEnumeration()
While Enum_Paraf.hasMoreElements
	Paraf = Enum_Paraf.nextElement()
	Paraf.CharFontName = "Times New Roman"
WEnd
Insertar una imagen (26-7-2011)

Código: Seleccionar todo

Dim Size as New com.sun.star.awt.Size
oFam_Estilos = ThisComponent.StyleFamilies
oEstilos_Pagina = oFam_Estilos.getByName("PageStyles")
oEstilo_Prede = oEstilos_Pagina.getByName("Standard")
oHeaderText = oEstilo_Prede.HeaderText
Encab_Start = oHeaderText.Start
Size.Height = 500
Size.Width = 1000
GraphObj = ThisComponent.createInstance("com.sun.star.text.TextGraphicObject")
GraphObj.GraphicURL = "file:///C:/MyPicture.JPG"
GraphObj.Size = Size
GraphObj.AnchorType = com.sun.star.text.TextContentAnchorType.AS_CHARACTER
oHeaderText.insertTextContent(Encab_Start, GraphObj, False)

Re: Macro Cabecera

Publicado: Mar Jul 26, 2011 12:36 pm
por Visente
Muchas Gracias por la respuesta, al final usare la primera opcion y la tercera, pero en la tercera me da problemas en "GraphicObj.Size = Size" me dice que "Error de ejecucion de basic Variable de objeto no establecida", creia que era pq no cojia bien la url, pero con el observador veo que si que la coje y al final no se pq podria ser.

Re: Macro Cabecera

Publicado: Mar Jul 26, 2011 1:16 pm
por Visente
Creo que he solucionado el problema anterior, lo que he hecho es poner el tamaño directamente en el objeto, pero ahora me surge otro problema:

Dim Size as New com.sun.star.awt.Size
oFam_Estilos = ThisComponent.StyleFamilies
oEstilos_Pagina = oFam_Estilos.getByName("PageStyles")
oEstilo_Prede = oEstilos_Pagina.getByName("Standard")
oHeaderText = oEstilo_Prede.HeaderText
Encab_Start = oHeaderText.Start
GraphObj = ThisComponent.createInstance("com.sun.star.text.TextGraphicObject")
GraphObj.GraphicURL = "file:///C:/MyPicture.JPG"
GraphObj.Size.Height = 100
GraphObj.Size.Width = 100
oHeaderText.insertTextContent(Encab_Start, Graph_Obj, False)------> PROBLEMA: Variable Objeto no establecida.

Re: Macro Cabecera

Publicado: Mar Jul 26, 2011 3:50 pm
por FJCC-ES
No sé como lo hice pero el código que publique no era la versión final. :oops: Lo he corregido.

Re: Macro Cabecera

Publicado: Mié Jul 27, 2011 12:47 pm
por Visente
No pasa nada la intencion es lo que cuenta,gracias de todas formas, al fina he conseguido insetar la imagen con "Stan.HeaderBackGraphicURL = ConvertToURL( "file:///C:/MyPicture.JPG" )" , lo unico malo es que me aparece en el centro de la cabecera y lo intento solucionar con "Stan.HeaderBackGraphicLocation="HEADER_LEFT_TOP" , pero me desaparece la imagen :(.

Por cierto otro problema que me encuentro es a la hora de cambiar el color del texto de la cabecera y su tamaño, consigo cambiar el color y el tamaño pero para variar cambio el todo el documento!!, me gustaria cambiar solo el de la cabecera.

Re: Macro Cabecera

Publicado: Jue Jul 28, 2011 5:24 am
por FJCC-ES
Sugiero

Código: Seleccionar todo

Stan.HeaderBackGraphicLocation= com.sun.star.style.GraphicLocation.LEFT_TOP
¿Puede subir el código para cambiar el color y tamaño del texto?

Re: Macro Cabecera

Publicado: Mié Ago 03, 2011 9:45 pm
por Visente
Muchas Gracias !! Me ha servido de mucho, al final resolvi el problemas de tamaño y color, mañana cuando llegue al trabajo pondre el codigo para que a la gente le sirva de ayuda.
De todas maneras me queda un ultimo problemilla y termino con la macro, he estado toda la mañana intentando hacer un boton aceptar para que me cierre el dialogo, pero no hay manera, intento hacer debajo de la macro principal otra macro con Dlg.endExecute() y me dice que el objeto no esta declarado, lo declaro como en la macro principal y me vuelve abrir el dialogo XDDDDDDD
Asi es como lo intente la primera vez y intento asociar el boton aceptar a la macro bAceptar:
Sub EjecutarMiDialogo1()
Dim oDialogo As Object

'Cargamos la librería Standard en memoria
DialogLibraries.LoadLibrary( "Standard" )
'Cargamos el cuadro de diálogo en memoria
oDialogo = CreateUnoDialog( DialogLibraries.Standard.getByName("miDialogo") )
'Lo ejecutamos (mostramos)

oDialogo.execute()

'Lo liberamos de memoria
oDialogo.dispose()

End Sub

Sub bAceptar()
oDialog.endExecute()
End Sub
Creo que le tendre que pasar algo de la primera macro a la segunda, supongo que sera el oDialog o algo asi .

Espero haberme explicado bien y gracias de antemano :)

Re: Macro Cabecera

Publicado: Mié Ago 03, 2011 11:46 pm
por FJCC-ES
Declare oDialogo como variable global

Código: Seleccionar todo

Dim oDialogo As Object

Sub EjecutarMiDialogo1()

'Cargamos la librería Standard en memoria
DialogLibraries.LoadLibrary( "Standard" )
'Cargamos el cuadro de diálogo en memoria
oDialogo = CreateUnoDialog( DialogLibraries.Standard.getByName("miDialogo") )
'Lo ejecutamos (mostramos)

oDialogo.execute()

'Lo liberamos de memoria
oDialogo.dispose()

End Sub

Sub bAceptar()
oDialog.endExecute()
End Sub

Re: Macro Cabecera[RESUELTO]

Publicado: Jue Ago 04, 2011 8:02 am
por Visente
Muchas Gracias!!!! :D Al final me ha servido soys unos cracks !!! ya he termiando!! ueeeeee!!! la verdad que no se me ocurriera lo de la variable global XD , si es como en Java.

Aqui dejo el codigo de mi cabecera para ver si le sirve a alguien :

Código: Seleccionar todo

Sub MacroCabecera

       oFam_Estilos = ThisComponent.StyleFamilies
       oEstilos_Para = oFam_Estilos.getByName("ParagraphStyles")
       oEstilo_Encab = oEstilos_Para.getByName("Header")
        oEstilo_Encab.CharFontName = "Arial Narrow"
	oEstilo_Encab.CharHeight = 8.5
	oEstilo_Encab.CharColor = RGB(0,0,800) 
	oDoc = ThisComponent
	oStyles = oDoc.getStyleFamilies
	oPS = oStyles.getByName("PageStyles")
	Stan = oPS.getByName("Standard")
	Stan.HeaderIsOn = True 
	Stan.HeaderHeight = 2500 + Stan.HeaderBodyDistance
	Stan.HeaderBackGraphicURL = ConvertToURL( "file:///C:/OpenOffice/logo.JPG" )
	Stan.HeaderBackGraphicLocation= com.sun.star.style.GraphicLocation.LEFT_TOP
        Stan.HeaderText.String = "" & Chr(13)&  Chr(9) & "texto en la cabecera"
     End Sub


Espero que a la gente le sirva, al final a base de golpes preguntar en el foro, leer el manual de mauricio y otros manuales, lo he podido hacer.

Una ultima pregunta ¿ como le puedo pasar la macro a mis compañeros? vosotros cuando pasis el archivo ya contienen las macros, yo se las paso a mis compañeros y no la tienen, ¿como lo haceis?

Re: [RESUELTO]Macro Cabecera

Publicado: Dom Feb 25, 2018 6:26 pm
por visatico
Buenas,
me ha gustado el ejemplo.
Lo he estado probando y hay una cosa que no sé como sería.

La idea es tener 2 cabeceras, una para la primera página y otra para el resto de páginas del documento.

Es posible hacer esto?

Re: [RESUELTO]Macro Cabecera

Publicado: Dom Feb 25, 2018 6:44 pm
por mauricio
Tienes que usar dos estilos de página para esto... pero... no es buena idea usar un tema tan viejo, es mejor que siempre habrás uno nuevo explicando detalladamente el problema y si es necesario hacer referencia a este tema.

Re: [RESUELTO]Macro Cabecera

Publicado: Dom Feb 25, 2018 6:50 pm
por visatico
Ok,
estaba buscando como hacer esto y he visto que este tema era justo lo que quería.