Formular Dateiauswahl zum Speichern

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

Moderator: Moderatoren

Luke78
**
Beiträge: 29
Registriert: Do, 27.09.2012 19:43

Formular Dateiauswahl zum Speichern

Beitrag von Luke78 »

Hallo zusammen

Ich bin gerade dabei meine Reports benutzerfreundlicher zu gestalten.
Im Hintergrund erstellen und als Excel oder PDF speichern funktioniert auch tadellos.
Allerding wollte ich es ermöglichen, dass Zielpfad und Dateiname vom Benutzer bestimmt werden können.

Leider scheint es, dass BASE in Formularen nur ein Bedienelement zum öffnen von Dateien zur Verfügung stellt.
Ich könnte da zwar existierende Dateien auswählen, den Pfad auslesen und überschreiben, aber das ist dann doch nicht ganz das gewollte.
Schön wäre es einen Dateidialog zu bekommen der wie bei einem klassischen "Speichern unter" funktioniert.
LO 3.6.5.2 auf Windows 7 64bit
"Ein Programm ist immer nur so gut wie sein Benutzer" - "Software has no brain, use your own"
F3K Total
********
Beiträge: 3724
Registriert: Mo, 28.02.2011 17:49

Re: Formular Dateiauswahl zum Speichern

Beitrag von F3K Total »

Hi, dies geht z.B.

Code: Alles auswählen

Sub S_Save_as
    dim document   as object
    dim dispatcher as object
    Dim aProps(0) as new com.sun.star.beans.PropertyValue
    aProps(0).Name  = "Hidden"
    aProps(0).Value = true	
    oCalcDoc = StarDesktop.loadComponentFromURL("private:factory/scalc","_blank", 0, aProps)
    osheet = oCalcdoc.sheets(0)
    ocell = osheet.getcellbyposition(0,0)
    ocell.string = "Na, dat klappt doch!"
    oFrame = oCalcDoc.CurrentController.Frame
    dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
    dispatcher.executeDispatch(oFrame, ".uno:SaveAs", "", 0, Array())   
    oCalcDoc.close -1
end Sub
Gruß R
Luke78
**
Beiträge: 29
Registriert: Do, 27.09.2012 19:43

Re: Formular Dateiauswahl zum Speichern

Beitrag von Luke78 »

Oh manchmal steht man echt auf dem Schlauch, den uno.Service SaveAs hatte ich eh schon benutzt.
Hatte dem nur Pfad un Filter mitgegeben um das ganze als Excel speichern zu können.

Wenn ich den Pfad raus nehme läuft es auch, allerdings ignoriert er dann den Filter.
Gibt es eine Möglichkeit die Dateitypauswahl vorauszuwählen?

Bei mir sieht der entsprechende Abschnitt aktuell so aus:

Code: Alles auswählen

dim pArg(1) 	as new com.sun.star.beans.PropertyValue

pArg(0).Name 	= "FilterName"
pArg(0).Value 	= "MS Excel 97"

oDispatcher.executeDispatch( oFrame, ".uno:SaveAs", "", 0, pArg())

LO 3.6.5.2 auf Windows 7 64bit
"Ein Programm ist immer nur so gut wie sein Benutzer" - "Software has no brain, use your own"
Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Re: Formular Dateiauswahl zum Speichern

Beitrag von komma4 »

Sieh' Dir doch mal die Funktion StoreDocument in der Bibliothek Tools Deiner Standard-Installation an.

Wird zwar nicht mit UNO gearbeitet - funktioniert aber gut (auch mit Filter)
Cheers
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
Luke78
**
Beiträge: 29
Registriert: Do, 27.09.2012 19:43

Re: Formular Dateiauswahl zum Speichern

Beitrag von Luke78 »

Danke für den Tip, leider bekomm ich es aber nicht ans Laufen.

Folgender Aufruf:

Code: Alles auswählen

sPath = replace(  oDocument.URL, oDocument.Title, "")
Tools.ModuleControls.storeDocument( oDocument, Array("MS Excel 97"), ReportName, sPath)
In StoreDocument taucht dann an folgender Stelle der Fehler "Objektvariable nicht belegt" auf:

Code: Alles auswählen

AddFiltersToDialog(FilterNames(), oStoreDialog)
Im Beobachter sind allerdings beide belegt.

EDIT: Auch wenn ich die URL mit ConvertFromURL umwandle bleibt der Fehler.
Irgendeine Idee?
LO 3.6.5.2 auf Windows 7 64bit
"Ein Programm ist immer nur so gut wie sein Benutzer" - "Software has no brain, use your own"
Antworten