Zum Inhalt springen
Der Guide für ein smartes Leben.
Reise ins Openoffice-UNOVersum

Immer dialogbereit

Autor: Redaktion pcmagazin • 4.12.2009 • ca. 1:50 Min

Immer dialogbereit Häufig entscheidet nicht der Entwickler eines Makros darüber, welches Dokument zu öffnen ist, sondern dessen Anwender. Dann schlägt die Stunde des FilePicker- Dienstes, der ein Dialogfeld für die Auswahl von einer oder mehreren Dateien bereitstellt: Das erzeugte FilePick...

Immer dialogbereit

Häufig entscheidet nicht der Entwickler eines Makros darüber, welches Dokument zu öffnen ist, sondern dessen Anwender. Dann schlägt die Stunde des FilePicker- Dienstes, der ein Dialogfeld für die Auswahl von einer oder mehreren Dateien bereitstellt:

Das erzeugte FilePicker-Objekt verfügt über diverse nützliche Methoden. Mit setDisplayDirectory etwa kann der Entwickler den Startordner festlegen, dessen Inhalt der Dialog beim Aufruf anzeigen soll:

objDateiDlg.setDisplayDirectory _convertToURL("D:\Briefe")

Die beliebig oft aufrufbare appendFilter-Methode erlaubt das Hinzufügen eines Dateifilters für die Auswahl eines bestimmten Dateityps. Dazu muss man der Methode eine Beschreibung des Dateityps, die als Filtertext sichtbar ist, sowie eine passende Dateimatrix übergeben. Das Beispiel fügt dem FilePicker-Dialog drei Filter für die Anzeige von Writer-, Calc- und beliebigen anderen Dateien hinzu:

objDateiDlg.appendFilter _"Writer-Dokumente (*.odt)" , "*.odt"objDateiDlg.appendFilter _"Calc-Dokumente (*.ods)" , "*.ods"objDateiDlg.appendFilter _"Alle Dateien (*.*)" , "*.*"

Welcher Filter beim Dialogaufruf eingestellt sein soll, lässt sich mit Hilfe der setCurrentFilter-Methode bestimmen:

objDateiDlg.setCurrentFilter _"Writer-Dokumente (*.odt)"

Die execute-Methode zeigt das Dialogfeld an und verrät mit ihrem Rückgabewert, ob der Anwender den Dialog abgebrochen (Wert = 0) oder regulär per OK- Schaltfläche (Wert = 1) beendet hat. Im letzten Fall liefert die getFiles- Methode ein String-Array zurück, das die Pfadnamen aller ausgewählten Dateien im URL-Format enthält.

Die erste (und in der Regel auch einzige Datei) ist im Array-Element mit der Indexzahl 0 zu finden. Das Beispiel bringt den Dateiwahldialog zur Anzeige und zeigt anschließend den Pfadnamen der ausgewählten Datei per MsgBox an:

If objDateiDlg.execute() = 1 ThenvntDateien() = objDateiDlg.getFilesMsgBox vntDateien(0)End If
Grundlagen der Makroentwicklung in Openoffice
API-Referenz und der hier zu sehende Developer's Guide liefern zwar die aktuellsten (Online-) Informationen, lassen es jedoch an Übersichtlichkeit fehlen.
© Archiv

Leider weist die aktuelle OpenOffice-Version 3.1 in Verbindung mit Windows Vista einen Fehler auf, der die Anzeige des systemeigenen Dateidialogs via FilePicker verhindert. Als Workaround empfiehlt sich das Einschalten des Kontrollkästchens OpenOffice.org-Dialog verwenden, das im Register Allgemein des Optionen-Dialogs (Befehl Extras/Optionen) zu finden ist.

Der FilePicker-Service nutzt anschließend die OpenOffice-eigene Version des Dialogs, die auf allen Systemplattformen funktioniert.

Der Bug wirkt sich übrigens nicht auf die Dienste des FolderPicker-Services aus, der die interaktive Auswahl eines Ordners erlaubt:

Dim objOrdnerDlg As ObjectobjOrdnerDlg = createUnoService _("com.sun.star.ui.dialogs.FolderPicker")

Das erzeugte FolderPicker-Objekt verfügt gleichfalls über eine Methode namens setDisplayDirectory, mit der man das Anfangsverzeichnis des Dialogs festlegen kann:

objOrdnerDlg.setDisplayDirectory _convertToURL("D:\Eigene Dateien")

Die execute-Methode zeigt das Dialogfeld an und signalisiert mit dem Rückgabewert 1 ein reguläres Ende. In dem Fall liefert die getDirectory-Methode dem Makro den (URL-)Pfad des gewählten Ordners frei Haus:

If objOrdnerDlg.execute() = 1 ThenMsgBox objOrdnerDlg.getDirectoryEnd If