FileControl Steuerelement

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

Moderator: Moderatoren

Benutzeravatar
Wolf
****
Beiträge: 118
Registriert: Fr, 23.04.2004 06:48

FileControl Steuerelement

Beitrag von Wolf »

Hallo,

Wer hat eine Idee, wie man das FileControl-Steuerelement initialisieren muß, damit es nicht als "Öffnen"-Funktion wirkt, sondern als "Save as" oder "speichern als...".
Rufe ich das FileControl-Steuerelement auf, kann ich Dateien auswählen, die vorhanden sind, und das Element gibt mir auch den Dateinamen zurück, will ich aber einen Dateinamen angeben, der noch nicht existiert, kommt eine Fehlermeldung gleich im Dateiauswahlfenster, dass die Datei nicht existiert. Dies ist aber gewollt (dass die Datei nicht existiert), denn ich will ja Daten mittels

Code: Alles auswählen

 OPEN Dateiname FOR OUTPUT AS #1
aus dem Dokument in eine einfache Textdatei Speichern.

Bitte helft !!!!

Gruß Wolf
Charly
*****
Beiträge: 450
Registriert: Di, 20.01.2004 13:14
Wohnort: München

Beitrag von Charly »

Hallo!

Ich muss vorausschicken: ich weiß es nicht, ob man mit einem FileControl eine Datei erzeugen kann. Mir ist der Open-Befehl auch nur bekannt für vorhandene Dateien. Vielleicht weiß jemand anders dafür eine Lösung.

Ich persönlich würde allerdings anders vorgehen. Ich würde per Makro ein leeres Writer-Dokument erzeugen. Dann würde ich von meinem Dokument die gewünschten Teile ins neue Dokument kopieren und dieses dann als Textdatei speichern und anschließend schließen.

Gruß
Charly
Toxitom
********
Beiträge: 3769
Registriert: Di, 12.08.2003 18:07
Wohnort: Wiesbaden
Kontaktdaten:

Beitrag von Toxitom »

Hallo Wolf,

Charly hat dir schon den richtigen Hinweis gegeben: Das File-Controll Steuerelement kann selbst keine eigene Dateien erzeugen! Wenn du also etwas "Neues" speichern möchtest, so kannst du natürlich einen eigene Eingabebox für den Namen verwenden, oder du nutzt den File-Control Dialog, fängst den Fehler ab, liest im Fehlerfall den eingegebenen Namen aus und erzeugst die Datei. Lässt sich mit einfachen Schleifen/Verzweigungen lösen.

Viele Grüße
Thomas
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
moritz
*****
Beiträge: 216
Registriert: Mi, 20.10.2004 20:54

Filepicker

Beitrag von moritz »

Hilft Dir der Hinweis "Filepicker" schon weiter oder soll ich Dir mehr dazu heraussuchen? Damit funktioniert das Speichern von Dateien wie gewohnt mit dem entsprechenden Dialogformular.
Moritz
Benutzeravatar
Wolf
****
Beiträge: 118
Registriert: Fr, 23.04.2004 06:48

Re: Filepicker

Beitrag von Wolf »

[quote="moritz"]Hilft Dir der Hinweis "Filepicker" schon weiter oder soll ich Dir mehr dazu heraussuchen? Damit funktioniert das Speichern von Dateien wie gewohnt mit dem entsprechenden Dialogformular.
Moritz[/quote]

Hallo Moritz,

Wäre nicht schlecht. Filepicker sagt mir zu Zeit noch nichts.

Danke
Charly
*****
Beiträge: 450
Registriert: Di, 20.01.2004 13:14
Wohnort: München

Beitrag von Charly »

Hallo!

mit dem FilePicker kannst du einen Dialog erzeugen zum Öffnen und speichern von Dateien, so als würdest du über das Menü den Punkt "Speichern unter" aufrufen. Es gibt dazu schon mehrere Threads.

zum Beispiel viewtopic.php?t=1897.

Ob dieser Dialog für deine Zwecke notwendig ist weiß ich nicht. Ich habe für dich einen Code geschrieben, der eine leere Textdatei erzeugt. Den Namen und Pfad mußt du allerdings per Inputbox eingeben. Falls das dem Makro fest hinterlegt werden kann, entfällt natürlich die Eingabe.

Code: Alles auswählen

Sub Textdateierzeugen()

HaupDok = ThisComponent

Frage = "Geben Sie Pfad und Namen der Textdatei" + chr(13)
Frage = Frage  + "mit dem Format z.B. C:\Testordner\Textdatei.txt ein"

Datei = inputbox(Frage)

if not fileexists(Datei) then
	dim Dummy()
	dim document   as object
    dim dispatcher as object
    dim args1(1) as new com.sun.star.beans.PropertyValue
    dim Url as string
	
	HilfsDok = Stardesktop.loadComponentFromUrl _("private:factory/swriter","_blank",0,Dummy())
	document = Hilfsdok.currentController.frame
	dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

	Url = ConvertToUrl(Datei)
	args1(0).Name = "URL"
    args1(0).Value = Url
    args1(1).Name = "FilterName"
    args1(1).Value = "Text"

    dispatcher.executeDispatch(document, ".uno:SaveAs", "", 0, args1())

	HilfsDok.close(false)
else
	MsgBox("Datei schon vorhanden")
end if

			
	
End Sub
gruß
Charly
Benutzeravatar
Wolf
****
Beiträge: 118
Registriert: Fr, 23.04.2004 06:48

Beitrag von Wolf »

Hallo Charly,

Jetzt weiß ich wo der Haase lang läuft, aber das ist nicht was ich meine.

Das "filecontrol" Steuerelement erzeugt weder Dateien, noch öffnet es welche. Es stellt nur in einem Dialogfenster die Verzeichnis- und Dateistruktur überschaubar dar und liefert nach dem Betätigen des "Öffnen"-Button den Pfad/Dateinamen als String zurück.
In diesem Dialog kann man sogar Verzeichnisse erzeugen. Nun macht das Erzeugen von Verzeichnissen nur Sinn, wenn ich da was hinein schreibe. Das soll der Dialog aber nicht tun. Er soll nur einen Dateinamen mit dem entsprechenden Pfad zufückgeben.
Existiert eine Datei, dann wird der Pfad/Dateiname in einem String nach dem Schließen des Dialogs mit dem "Öffnen"-Button wie folgt zurückgegeben

Code: Alles auswählen

Dim Dateiname as String
Dim dlgDateiName as Object

dlgDateiName=Dlg.getControl("FileControl")

Dateiname=dlgDateiName.GetText()
Das ist alles. Was ich damit dann mache ist ein anderes Thema.

Gebe ich aber in die Eingabezeile des Dialoges einen Dateinamen ein der noch nicht existiert, dann erscheint bereits im Dialog eine Fehlermeldung, die ich nicht beeinflussen kann.

Ich will nur in diesem übersichtlichen Dialog mir ein Verzeichnis meiner Wahl auswählen (oder ein Neues erstellen, was ja funktioniert) und dann einen Dateinamen ins Eingabefeld schreiben.
Dann "OK" drücken und ich möchte zum Beispiel den String:

"c:\Eigene Dateien\Dokumente\neuer_text.txt"

erhalten. (neuer_text.txt hätte ich dann zum Beispiel in das Textfeld für den Dateinamen eingegeben.)

Ich habe eben keinen Bock den gesamten Pfad in einer Inputbox per Hand einzutippen. Wozu gibt es denn diesen filecontrol-Dialog. Ich muß dieses Ding nur dazu bringen die Fehlermeldung zu unterlassen und mir einfach diesen String zurückzugeben, so wie es passiert wenn deine Datei existiert.

Wohl gemerkt, das FileControl Steuerelement ist nur ein AUSWAHLFENSTER oder ein AUSWAHLDIALOG. Es öffnet keine Dateien, es erstellt keine Dateien es gibt nach dem Schließen des Dialogs eigentlich nur einen String zurück, mit dem ich dann hantieren kann.

Wolf
Charly
*****
Beiträge: 450
Registriert: Di, 20.01.2004 13:14
Wohnort: München

Beitrag von Charly »

Hallo!

Ich habe dein Problem vollkommen falsch verstanden. Ich bin davon ausgegangen, dein Makro weiß den vollständigen Pfad und Dateinamen und mein Inputbefehl war nur eine Krücke für meinen Codeteil.

Wenn du ein Auswahlfenster brauchst, solltest du dich doch mit dem Filepicker beschäftigen und dir den von mir im obigen Beitrag genannten Thread anschauen.

Ich habe ihn mir jetzt selbst genauer angeschauen und getestet. Man erhält ein Auswahlfenster wie beim "Speichern unter" und kann sogar einen neuen Dateinamen eingeben. Das drücken auf Speichern bewirkt jedoch nichts, schließt nur den Dialog ab. Mit dem Makro kann man jedoch dann die zuletzt eingestellten Daten abfragen. Für das Speichern muss man dann eine eigene Routine mit den abgefragten Daten schreiben.

Den Dateinamen mit Pfad erhält man jedoch in Url-Form. Dies müsste man gegebenenfalls mit dem Befehl: ConvertFromUrl umwandeln.

Im folgenden mein Testprogramm:

Code: Alles auswählen

Sub Speicherdialog()
dim ok
dim datei
dim filter as string
dim Dialogtyp(0)


doc= thisComponent

DateiDialog = createunoservice("com.sun.star.ui.dialogs.FilePicker")
Dialogtyp(0) = com.sun.star.ui.dialogs.TemplateDescription.FILESAVE_SIMPLE
DateiDialog.initialize(DialogTyp())
DateiDialog.appendFilter("Textdateien(txt)",".txt")
ok = DateiDialog.execute

if ok = 1 then
	datei = Dateidialog.getFiles()
	filter = dateidialog.CurrentFilter
	msgbox filter
	Url = Datei(0)
	msgbox url
end if		

end sub
Gruß
Charly
Benutzeravatar
Wolf
****
Beiträge: 118
Registriert: Fr, 23.04.2004 06:48

Beitrag von Wolf »

Danke Charly,

Das ist es !!! Klappt vom Feinsten !
Wo hast Du diese Infos her ? Gibt es irgendwo 'ne Dok. dafür?

Danke

Wolf
Charly
*****
Beiträge: 450
Registriert: Di, 20.01.2004 13:14
Wohnort: München

Beitrag von Charly »

Hallo!
Wo hast Du diese Infos her ? Gibt es irgendwo 'ne Dok. dafür?

Diese Informationen habe ich teilweise durch die Dokumentation StarBasic FAQ von Michael Dannenhöfer , das Programmierhandbuch von SUN und durch dieses Forum erhalten. Links dafür stehen an erster Stelle im Basic-Forum unter "sehr wichtig".

Noch ein Tip für den FilePicker. Im Auswahlfenster kann man nur Dateien sehen für die man Filter bereit gestellt hat.

Der Filter für "alle Dateien" lautet:

Code: Alles auswählen


DateiDialog.appendFilter("Alle Dateien(*.*)","*.*")

Das habe ich gerade erst herausgefunden.

Gruß
Charly
Benutzeravatar
Wolf
****
Beiträge: 118
Registriert: Fr, 23.04.2004 06:48

Beitrag von Wolf »

Hallo Charly,

Danke auch für den Tip mit dem Filter. Ich werde mir mal die Links im Forum genauer betrachten.

Tschüß

Wolf
Antworten