Seite 1 von 1

kopfzeile auf aktives blatt anwenden

Verfasst: Mo, 06.03.2006 15:03
von kannenklaus
hallo gruppe,

mit dem folgenden code wird die kopfzeile auf allen blättern ausgetauscht. ich möchte aber, dass dies nur bei dem gerade aktiven blatt geschehen soll. über eine for/next schleife würde ich mir dann alle blätter ändern lassen.

die anweisung oAktivesBlatt und StylesFamilies verträgt sich nicht.

der code, der über thisComponent.StylesFamilies die kopfzeile von allen blättern ändert lautet:

Code: Alles auswählen

Sub KopfzeileDefinieren
	Dim calcDoc as Object, oAktivesBlatt as Object
	Dim oFormatFamilien as Object, oSeitenFormate as Object
	Dim oSeitenFormat as Object, oKopfZeile as Object
	Dim oTextLi as Object, oTextMi as Object, oTextRe as Object
	calcDoc = ThisComponent
	oAktivesBlatt = calcDoc.CurrentController.activeSheet 
	oFormatFamilien = calcDoc.StyleFamilies()
	oSeitenFormate = oFormatFamilien.getByName("PageStyles")
	oSeitenFormat = oSeitenFormate.getByName("Standard")
	oSeitenFormat.HeaderIsOn = true
	oSeitenFormat.HeaderIsShared = true
	oKopfZeile = oSeitenFormat.RightPageHeaderContent
	oTextLi = oKopfZeile.LeftText
	oTextMi = oKopfZeile.CenterText
	oTextRe = oKopfZeile.RightText
	oTextLi.setString("K. König")
	oTextMi.setString("Steuererklärung 2004")
	oTextRe.setString("St.Nr. 115/xxx/xxx")
	oSeitenFormat.RightPageHeaderContent = oKopfzeile
End Sub
freue mich auf eine antwort

grüße

klaus

Verfasst: Mo, 06.03.2006 17:08
von Stephan
mit dem folgenden code wird die kopfzeile auf allen blättern ausgetauscht.
Nein.
Der folgende Code tauscht/erstellt nur eine Kopfzeile für die Tabellen denen die Seitenvorlage "Standard" zugewiesen ist.
ich möchte aber, dass dies nur bei dem gerade aktiven blatt geschehen soll.
Dann mußt Du dieser Tabelle eine eigene Seitenvorlage zuweisen und dort die Kopfzeile entsprechend gestalten.
Also im Wesentlichen:
*neue Seitenvorlage erstellen:

Code: Alles auswählen

'...
oDoc = StarDesktop.CurrentComponent 
MyPageStyle = oDoc.createInstance( "com.sun.star.style.PageStyle" )
oDoc.getStyleFamilies().getByName( "PageStyles" ).insertByName( "kopf_ein", MyPageStyle )
'...
*Seitenvorlage zuweisen:

Code: Alles auswählen

'...
calcDoc = ThisComponent 
oAktivesBlatt = calcDoc.CurrentController.activeSheet
oAktivesBlatt.PageStyle = "kopf_ein"
'...
die anweisung oAktivesBlatt und StylesFamilies verträgt sich nicht.


Was heißt das? Weder ist oAktivesBlatt noch StylesFamilies eine Anweisung, noch weiß ich wie Objekte (was ja beide sind) sich nicht vertragen können.



Gruß
Stephan

Verfasst: Di, 07.03.2006 10:53
von kannenklaus
hallo stephan,

das mit der seitenvorlage erstellen und dem zuweisen klappt nun auch auf das gerade aktive blatt. beim zweiten anwenden auf ein anderes aktives blatt kommt eine fehlermeldung die da lautet:

Basic Laufzeitfehler
Es ist eine exception aufgetreten
Type:com.sun.star.container.ElementExistException

kann vor dem erzeugen prüfen, ob die seitenvorlage schon besteht und diese dann löschen?

freue mich auf eine antwort.

grüße

klaus

Verfasst: Di, 07.03.2006 11:59
von ykcim
Normalerweise kann man das mit hasbyname prüfen.

if oDoc.getStyleFamilies().getByName( "PageStyles" ).hasbyname("Kopf_ein")=false then

mfg
Michael

Verfasst: Di, 07.03.2006 14:11
von kannenklaus
hallo michael,

klappt bestens. das entsprechende code-segment sieht bei mir nun folgendermaßen aus:

Code: Alles auswählen

if calcDoc.getStyleFamilies().getByName("PageStyles").hasbyname("Kopf1")=true then
calcDoc.getStyleFamilies().getByName( "PageStyle).removeByName("Kopf1")
	else
'--weiterer code
danke für deine unterstützung.

grüße

klaus