kopfzeile auf aktives blatt anwenden

Programmierung unter AOO/LO (StarBasic, Python, Java, ...)

Moderator: Moderatoren

kannenklaus
*****
Beiträge: 319
Registriert: Mi, 14.12.2005 08:08
Wohnort: freising - oder dort, wo das bier herkommt

kopfzeile auf aktives blatt anwenden

Beitrag 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
Stephan
********
Beiträge: 12368
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Beitrag 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
kannenklaus
*****
Beiträge: 319
Registriert: Mi, 14.12.2005 08:08
Wohnort: freising - oder dort, wo das bier herkommt

Beitrag 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
ykcim
*****
Beiträge: 324
Registriert: Di, 29.07.2003 15:22
Wohnort: Neu-Isenburg
Kontaktdaten:

Beitrag von ykcim »

Normalerweise kann man das mit hasbyname prüfen.

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

mfg
Michael
__
FAQ zu Starbasic -> http://www.starbasicfaq.de
kannenklaus
*****
Beiträge: 319
Registriert: Mi, 14.12.2005 08:08
Wohnort: freising - oder dort, wo das bier herkommt

Beitrag 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
Antworten