Hallo zusammen
@wellmo:
Dein Code ruft aber leider nicht den Speichern-Dialog auf.
@Jody
Ich habe dir mal eine Funktion geschrieben (mit der API),
mit der ein Speichern-Dialog geöffnet wir, und der du ein Dokument, ein Verzeichnis,
und einen Name übergeben kannst.
(Falls das Verzeichnis noch nicht existiert, wird es einfach angelegt.)
Mit der API kann man leider nicht, wie mit dem Dispacher,
einfach den normalen Speichern-Dialog mitsamt dazugehörigen Funktionen aufrufen.
Mann muss sich das alles selber Basteln.
Meine Speichern-Funktion erlaubt nur das Speichern in ODF - Formaten (odt,ods,odp,odg,odb,odf), und auch nicht als Vorlage.
dafür erkennt sie selbstständig, was es für ein Dokument ist.(Endung wird selbstständig erzeugt.)
Wenn das Dokument in Fremdformaten abgespeichert werden soll, benötigt man zusätzliche Filter.
Es gibt in OO und LO leider einen Bug, so das man dem Windows- eigenen FilePicker-Dialog keinen Pfad übergeben kann.
Mit dem LO oder OO eigenen Dialog geht es aber.(muss man unter "Extrs"->"Optionen"->Allgemein" einstellen.)
Unter Linux tritt dieser Bug nicht auf.
Aber nun Zum Code:
In dem Sub "Test" musst du noch den gewünschten Name, und das Verzeichnis anpassen.
Die eigentliche Speichern-Funktion ist: "Function saveDocument(...)"
Das Sub Test dient lediglich dazu, das du siehst, wie man die Funktion aufruft.
Die Funktion selber gibt "True" zurück, wenn alles geklappt hat.
Falls das dokument nicht gespeichert wurde gibt die Funktion "False" zurück.
Code: Alles auswählen
REM ***** BASIC *****
Sub Test
Dim oDoc As object
dim sDir As String
Dim sFileName As String
dim bSaveCoppy AS Boolean
'das Aktuelledokument
oDoc=ThisComponent
'Dein gewünschtes Verzeichnis:
sDir="C:/Users/UserName/Desktop/Kunden/"
'Gewünschter Name des Dokuments, ohne Endung!
sFileName ="Mein_Dokument"
bSaveCoppy=False 'False Entspricht dem normalen "Speichern unter"
'Wenn "bSaveCoppy=True" wird eine Kopie des Dokuments gespeichert,
'Das offene Dokument bleibt aber unter dem alten Verzeichnis, und wird nicht gespeichert.
'Aufruf der Funktion, und Übergabe der Parameter.
'Gleichzeitig überprüfe ich hier, ob das Speichern auch geklappt hat.
if not saveDocument(oDoc, sDir, sFileName,bSaveCoppy) then
MsgBox "Das Dokument konnte nicht gespeichert werden.",16,"Fehler"
end if
end sub
Function saveDocument(ByVal oDoc As object, ByVal sDir As String,_
ByVal sFileName As String, ByVal bSaveCoppy As Boolean)As Boolean
Dim sEnding$
Dim Dialogtyp(0)
dim sUrl$
Dim MyDialog As object
dim dummy()
Dim FilterName As String
'Überprüfen, ob das Verzeichnis bereits existiert.
If Not FileExists(sDir)Then 'wenn nicht,
MkDir sDir 'dann anlegen des Verzeichnises
End if
On error goto Errorhandler 'Wenn ein Fehler auftrit gehe zu
'Dateityp ermitteln, und Endung festlegen.
If oDoc.supportsService("com.sun.star.text.TextDocument") Then
sEnding = ".odt"
FilterName="ODF Textdokument(.odt)"
elseIf oDoc.supportsService("com.sun.star.sheet.SpreadsheetDocument") Then
sEnding = ".ods"
FilterName="ODF Tabellendokument(.ods)"
elseIf oDoc.supportsService("com.sun.star.presentation.PresentationDocument") Then
sEnding = ".odp"
FilterName="ODF Präsentation(.odp)"
elseIf oDoc.supportsService("com.sun.star.drawing.DrawingDocument") Then
sEnding = ".odg"
FilterName = "ODF Zeichnung(.odg)"
elseIf oDoc.supportsService("com.sun.star.sdb.OfficeDatabaseDocument") Then
sEnding = ".odb"
FilterName = "ODF Datenbank(.odb)"
elseIf oDoc.supportsService("com.sun.star.formula.FormulaProperties") Then
sEnding = ".odf"
FilterName= "ODF Formel(.odf)"
Else
goto Errorhandler
End if
'Endung an den Namen anhängen
sFileName = sFileName & sEnding
'Pfad auswahldialog initialisieren
MyDialog=createunoservice("com.sun.star.ui.dialogs.FilePicker")
DialogTyp(0) =com.sun.star.ui.dialogs.TemplateDescription.FILESAVE_SIMPLE
With MyDialog
.initialize( DialogTyp())
.displaydirectory=converttourl(sDir)
.DefaultName = sFileName
.appendFilter( FilterName , "*" & sEnding )
end With
'Dialog ausführen, und überprüfen, ob mit Speichern bestätigt wurde
If MyDialog.execute() = _
com.sun.star.ui.dialogs.ExecutableDialogResults.OK then
' ausgewählter Dateiname
sUrl = MyDialog.Files(0)
'Datei Speichern
If bSaveCoppy Then
oDoc.storeToUrl(sUrl,dummy()) '"storeToUrl" bewirkt,
'dass das dokument zwar unter der adresse gespeichert wird,
'aber das geöffnete dokument bleibt das unter dem vorherigen speicherort.
Else
oDoc.storeAsUrl(sUrl,dummy()) 'Das normale "Speichern unter".
end if
saveDocument=True
Exit Function
End if
Errorhandler:
saveDocument=False
End Function
Gruß Frieder