[LibreOffice] Vorlagenverwaltung - Neues Dokument - Zugriff per Makro?

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

Moderator: Moderatoren

Stephan
********
Beiträge: 10596
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

[LibreOffice] Vorlagenverwaltung - Neues Dokument - Zugriff per Makro?

Beitrag von Stephan » Di, 02.10.2018 09:01

Hallo,

ich möchte in LO ein neues Dokument anhand einer, in die Vorlagenverwaltung integrierten, Dokumentvorlage erstellen. Dazu soll vorab die Vorlage durch den Anwender auswählbar sein.

Gibt es in LO irgendeine Möglichkeit auf den Vorlagendialog (Datei-Neu-Vorlagen...) per Makro zuzugreifen und die gewählte Vorlage 'abzufangen'? WAs ich brauche ist das Dokumentobjekt des neuen Dokuments.

Mir ist klar das ich in der Vorlage ein Ereignis (Extras-Anpassen) definieren kann was ein Makro startet wenn ein neues Dokument erstellt wird das auf dieser Vorlage basiert, nur das scheint mit für den Routinebetrieb zu unsicher und setzt außerdem Voraus das ich in den Vorlagen vorher dieses Ereignis definiere.

Hat jemand einen Rat?

Ich sehe bisher nur die Möglichkeit umständlich selbst einen Dialog zu programmieren in welchem die Vorlagen auswählbar sind. Das ist aufwändig und wird optisch immer anders aussehen als der Originaldialog, weil die Programmiermöglichkeiten (zumindest per Basic) zu begrenzt sind.
Den vorhandenen Dialog zu nutzen wäre hingegen optimal und ich hoffe jetzt das beim neuen Vorlagendialog von LO vielleicht eine Zugriffsmöglichkeit bestehen könnte.

Mit "neuen Vorlagendialog" meine ich:

Vorlagendialog_LO.gif
Vorlagendialog_LO.gif (15.77 KiB) 374 mal betrachtet

Gruß
Stephan

quotsi
*****
Beiträge: 238
Registriert: Do, 14.11.2013 10:04

Re: [LibreOffice] Vorlagenverwaltung - Neues Dokument - Zugriff per Makro?

Beitrag von quotsi » Di, 02.10.2018 09:35

Der Begriff "Vorlagendialog" wird von Dir nicht präzise gehandhabt.
Denn was willst Du? Eine neue Vorlage selbst erstellen und dann in den Katalog einbauen oder eine fremde Vorlage in den Katalog einbauen oder eine eigene aus einem Dokument in den Katalog einbauen. Alles das geht.
Unter Datei->Vorlagen->Vorlagen verwalten offnet sich der Vorlagenmanager. Und da sind zwei interessante Dinge: rechts unten Importieren und links unten der zweite Knopf Online-Vorlagen durchstöbern
win7prof - Avira - LO 5.4.7.2 (x64) - AOO 4.1.5

Stephan
********
Beiträge: 10596
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: [LibreOffice] Vorlagenverwaltung - Neues Dokument - Zugriff per Makro?

Beitrag von Stephan » Di, 02.10.2018 09:49

Denn was willst Du?
Die Rückgabe (den Event) des Vorlagensdialogs abfangen.

Im Standardfall [1] würde eine Vorlage gewählt und ein neues Dokument, basierend auf dieser Vorlage erzeugt, und von diesem Dokument brauche ich den Namen der Vorlage (oder gerne auch das Dokumentobjekt in einer Variable).

Ob das möglich ist weiß ich nicht, nur ich hoffe das LO das für den neuen Vorlagendialog implementiert haben könnte.


[1]
Der Anwender kann alternativ z.B. den Dialog auch wieder schließen oder etwas Alternatives tun, z.B. eine Vorläge zum Bearbeiten/Ändern öffnen


Gruß
Stephan

Stephan
********
Beiträge: 10596
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: [LibreOffice] Vorlagenverwaltung - Neues Dokument - Zugriff per Makro?

Beitrag von Stephan » Mi, 03.10.2018 08:09

Ich habe jetzt folgende Lösung gefunden:

-es wird zunächst, anhand der Titel, registriert welche Fenster/Dokumente offen sind
-nun wird der Dialog zur Auswahl einer Vorlage geöffnet, dort eine neue Dokumentvorlage gewählt und darauf basierend ein neues Dokument erstellt
-jetzt wird geprüft welche FEnster nun offen sind um, im Vergleich mit der ersten Prüfung, das eine Fenster zu finden das dem neuen Dokument entspricht (hierbei wird auch der Sonderfall berücksichtigt das die Vorlage (fälschlich) zum Bearbeiten geöffnet wurde, denn dieses Dokument hat bereits eine Speicheradresse, ein neues Dokument noch nicht)
-das Dokument kann nun wie gewöhnlich bearbeitet werden

der Code sieht so aus:

Code: Alles auswählen

Sub neues_Dokument_erstellen()
	'bestimmen welche Fenster/Dokumente offen
	Redim alle_Titel(StarDesktop.Frames.Count-1)
	For i = 0 To UBOUND(alle_Titel())
		alle_Titel(i) = StarDesktop.Frames(i).title
	Next i
	
	vorlagenverwaltung_oeffnen()
	
	If StarDesktop.Frames.Count-1 > UBOUND(alle_Titel()) Then
			For i = 0 To StarDesktop.Frames.Count-1
				titel_gefunden = 0
				For j = 0 To UBOUND(alle_Titel())
					If StarDesktop.Frames(i).title = alle_Titel(j) Then 
						titel_gefunden = 1
						Exit For
					End If
				Next j
				If titel_gefunden = 0 Then 'wir haben das neue Fenster gefunden
					'unterscheiden ob neues Dokument oder (fälschlich) Vorlage zum Bearbeiten geöffnet
					Select Case StarDesktop.Frames(i).getCreator.getCurrentComponent.hasLocation()
						Case True
							'Vorlage ist zum Bearbeiten geöffnet
						Case False
							'es existiert ein neues Dokument, jetzt weiteres Bearbeiten durchführen:
							'...
					End Select
					Exit For
				End If
			Next i
		Else
			'es wurde kein neues Fenster erzeugt, deshalb nichts zu tun 
	End If
End Sub

sub vorlagenverwaltung_oeffnen()
	rem ----------------------------------------------------------------------
	rem define variables
	dim document   as object
	dim dispatcher as object
	rem ----------------------------------------------------------------------
	rem get access to the document
	document   = ThisComponent.CurrentController.Frame
	dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
	rem ----------------------------------------------------------------------
	dispatcher.executeDispatch(document, ".uno:NewDoc", "", 0, Array())
end Sub

Gruß
Stephan

Antworten