Aktionen für bestimmte Seitenformate - sofern im aktuellen Dokument vorhanden

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

Moderator: Moderatoren

fraschi51
Beiträge: 5
Registriert: Do, 08.12.2022 14:00

Aktionen für bestimmte Seitenformate - sofern im aktuellen Dokument vorhanden

Beitrag von fraschi51 »

Hallo miteinander,

ich probiere das aktuelle, aber nicht lokal, sondern nach ISO formatierte, Datum in die Fußzeile zu bringen, was ja grundsätzlich mit dem nachfolgenden Code - bezogen auf das Standard-Seitenformat - auch gelingt:

Code: Alles auswählen

Sub FusszeileSetzen

 IF NOT ThisComponent.supportsService ( "com.sun.star.sheet.SpreadsheetDocument" ) then exit Sub

	DIM OFormatFamilien as Object, oSeitenFormate as Object
	DIM oSeitenFormat as Object, oFT as Object, oText as Object

	oFormatFamilien = ThisComponent.StyleFamilies
	oSeitenFormate = oFormatFamilien.getByName("PageStyles")
'	for each stylename in Array("Standard", "Standard_Min")
	oSeitenFormat = oSeitenFormate.getByName("Default")
'	oSeitenFormat = oSeitenFormate.getByName("Standard_Min")
'	oSeitenFormat = oSeitenFormate.getByName(stylename)
	oSeitenFormat.FooterIsOn = True
	oSeitenFormat.FooterIsShared = true  'beide Seiten sind gleich
	oSeitenFormat.firstPageFooterIsShared = TRUE  'erste Seite wie Folgeseiten
	oFT = oSeitenFormat.rightPageFooterContent  'FooterText Objekt
	
	oText = oFT.RightText     'Rechtes Textobjekt
	
	oText.setstring(format( now(), "yyyy-mm-dd"))

	oSeitenFormat.rightPageFooterContent = oFT
End Sub
Jetzt wollte ich diese Anweisungen nicht nur im Standard-, sondern auch noch in einem weiteren Seitenformat vornehmen lassen.
Die oben auskommentierte 'for each'-Schleife (mit der anschließenden Auswahl aus dem Array) funktioniert aber nur, sofern auch die beiden, im Array genannten Seitenformate überhaupt im aktuellen Dokument vorhanden sind.
Wie kann ich also die 'for each'-Schleife so beschränken, dass sie nur für die Seitenformate durchlaufen wird, die auch im aktuellen Dokument tatsächlich vorhanden sind?

Besten Dank für sachdienliche Hinweise.

Franklin

Moderatorenhinweis:
Verschoben nach "Makros und allgemeine Programmierung"
Toxitom
********
Beiträge: 3768
Registriert: Di, 12.08.2003 18:07
Wohnort: Wiesbaden
Kontaktdaten:

Re: Aktionen für bestimmte Seitenformate - sofern im aktuellen Dokument vorhanden

Beitrag von Toxitom »

Hey Franklin,

bleibt erst noch mal die Frage: warum willst Du eine Einschränkung der Seitenvorlagen in einem Array überhaut vornehmen? Möchtest Du nicht einfach alle im Dokument vertreteten bearbeiten? Oder soll das wirklich selektiv nur auf die Von Dir benannten stattfinden?

Also, der Code sehe dann wie folgt aus:

Code: Alles auswählen

Sub FusszeileSetzen

 IF NOT ThisComponent.supportsService ( "com.sun.star.sheet.SpreadsheetDocument" ) then exit Sub

	DIM OFormatFamilien as Object, oSeitenFormate as Object
	DIM oSeitenFormat as Object, oFT as Object, oText as Object

	oFormatFamilien = ThisComponent.StyleFamilies
	oSeitenFormate = oFormatFamilien.getByName("PageStyles")
	REM Schleife über alle gewünschten Seitenformate
	for each stylename in Array("Standard", "Standard_Min")    'den Array besser gesondert definieren und aufbauen ...aber ok
	   if oSeitenFormate.hasByName(stylename) then    'nur, wenn das Seitenformat überhaupt vorhanden ist!
	      oSeitenFormat = oSeitenFormate.getByName(stylename)
	      with oSeitenFormat
	         .FooterIsOn = True
	         .FooterIsShared = true  'beide Seiten sind gleich
	         .firstPageFooterIsShared = TRUE  'erste Seite wie Folgeseiten
	       end with
	   
	     oText = oFT.RightText     'Rechtes Textobjekt
	     oText.setstring(format( now(), "yyyy-mm-dd"))
	     oSeitenFormat.rightPageFooterContent = oFT
	     
	   end if
       next
End Sub
Viele Grüße
Tom
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
fraschi51
Beiträge: 5
Registriert: Do, 08.12.2022 14:00

Re: Aktionen für bestimmte Seitenformate - sofern im aktuellen Dokument vorhanden

Beitrag von fraschi51 »

Danke für den Code, aber bei

.FooterIsOn = True

kommt die Fehlermeldung 'Objektvariable nicht belegt'.

Zu Deiner Frage: Ja, das hatte ich auch erst überlegt, aber es kann sein, dass es in einigen Arbeitsblättern bestimmte Seitenformate gibt, wo die rechte Fußzeile eben mit einem anderen Inhalt belegt ist - und das sollte dann nicht geändert werden.
Toxitom
********
Beiträge: 3768
Registriert: Di, 12.08.2003 18:07
Wohnort: Wiesbaden
Kontaktdaten:

Re: Aktionen für bestimmte Seitenformate - sofern im aktuellen Dokument vorhanden

Beitrag von Toxitom »

ja, sorry, da fehlt noch ne Zeile;))

Nach der if -Abfrage muss es heissen:

Code: Alles auswählen

oSeitenFormat = oSeitenFormate.getByName(stylename)


Viele Grüße
Tom
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
fraschi51
Beiträge: 5
Registriert: Do, 08.12.2022 14:00

Re: Aktionen für bestimmte Seitenformate - sofern im aktuellen Dokument vorhanden

Beitrag von fraschi51 »

Danke, jetzt kommt keine Fehlermeldung mehr ... ich werde es dann mal ausprobieren und weiter beobachten ...

Franklin
fraschi51
Beiträge: 5
Registriert: Do, 08.12.2022 14:00

Re: Aktionen für bestimmte Seitenformate - sofern im aktuellen Dokument vorhanden

Beitrag von fraschi51 »

Jetzt habe ich noch eine Ergänzungsfrage:

Mit welchem ergänzenden Code kann ich verhindern, dass das Macro auch beim LibO-Programmstart ausgeführt werden will und dann natürlich auf Fehler läuft, weil kein Spreadsheet geladen ist?

Besten Dank für Hinweise
Franklin
Hiker
******
Beiträge: 590
Registriert: Mo, 08.09.2014 21:34
Wohnort: Berlin

Re: Aktionen für bestimmte Seitenformate - sofern im aktuellen Dokument vorhanden

Beitrag von Hiker »

? Ich hätte angenommen, dass Dein erstes IF derartige Fehler schon vermeidet:

Code: Alles auswählen

IF NOT ThisComponent.supportsService
Es sei denn ThisComponent ist nicht definiert....

Aber wenn das Macro an Laden eines Dokuments gebunden wird, sollte das nicht auftauchen. An welches Event hast Du das Macro den eingehängt?
Libre Office 6.3.1 (Win 10 Pro) / Libre Office 6.0.7 (Win8.1 Pro, Win 7 Pro) / AOO (Win 7)
fraschi51
Beiträge: 5
Registriert: Do, 08.12.2022 14:00

Re: Aktionen für bestimmte Seitenformate - sofern im aktuellen Dokument vorhanden

Beitrag von fraschi51 »

- Ansicht wurde erzeugt
- Dokument speichern
- Dokument speichern unter
- Dokument drucken

Beim zweiten LibO-Aufruf kommt dann übrigens die Fehlermeldung nicht mehr ... :-?

Edit: Die Ergänzung der von Hiker vorgeschlagenen Zeile bringt nur Fehler.
Falls also sonst jemand eine funktionierende Code-Ergänzung kennt ....
Antworten