🙏 Bitte helfen Sie uns das LibreOffice Forum zu erhalten. 🙏
Ihre Spende wird für die Deckung der laufenden Kosten sowie den Erhalt und Ausbau 🌱 des LibreOffice Forums verwendet.
🍀 Wir hoffen auf Ihre Unterstützung - vielen Dank!🍀
>> Dank Ihrer Unterstützung -> Keine Werbung für alle registrierten LibreOffice-Forum User! <<
🤗 Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet. 🤗
"Speichern unter" am alten Ort per Makro?
"Speichern unter" am alten Ort per Makro?
Hallo,
ich habe vor ein paar Tagen festgestellt, dass es keine Möglichkeit gibt, einzustellen, dass LO beim "Speichern unter" von Dateien zwingend dasselbe Verzeichnis nimmt, aus dem heraus sie geöffnet wurden. Bei "Speichern" mit dem alten Namen geht das natürlich.
Zumeist wird bei "Speichern unter" das letzte Verzeichnis genommen, in das etwas gespeichert wurde.
Ich würde dazu gerne einen Makro haben, kenne mich aber mit den APIs etc überhaupt nicht aus.
Hat jemand einen Makro, der
1. ausliest, aus welchem Verzeichnis eine Datei geöffnet wurde (in welchem sie zum Zeitpunkt des Aufrufs "liegt"),
2. dann einen "Speichern unter"-Dialog öffnet, in dem der Pfad schon eingetragen ist, nicht aber der Dateiname (weil man ja etwa etwas hinzufügen will, sonst kann man ja "Speichern" nehmen)?
... und den man dann auf die Symbolleiste legen kann - als Ersatz für "Speichern unter"?
Dank im Voraus
ich habe vor ein paar Tagen festgestellt, dass es keine Möglichkeit gibt, einzustellen, dass LO beim "Speichern unter" von Dateien zwingend dasselbe Verzeichnis nimmt, aus dem heraus sie geöffnet wurden. Bei "Speichern" mit dem alten Namen geht das natürlich.
Zumeist wird bei "Speichern unter" das letzte Verzeichnis genommen, in das etwas gespeichert wurde.
Ich würde dazu gerne einen Makro haben, kenne mich aber mit den APIs etc überhaupt nicht aus.
Hat jemand einen Makro, der
1. ausliest, aus welchem Verzeichnis eine Datei geöffnet wurde (in welchem sie zum Zeitpunkt des Aufrufs "liegt"),
2. dann einen "Speichern unter"-Dialog öffnet, in dem der Pfad schon eingetragen ist, nicht aber der Dateiname (weil man ja etwa etwas hinzufügen will, sonst kann man ja "Speichern" nehmen)?
... und den man dann auf die Symbolleiste legen kann - als Ersatz für "Speichern unter"?
Dank im Voraus
Re: "Speichern unter" am alten Ort per Makro?
Ich habe nun einen Versuch gemacht, der aber leider noch hakt:
Dieser Macro greift zum Speichern der Datei offenkundig wirklich auf das Verzeichnis zu, in dem sie geöffnet wurde, aber
1. er speichert sie direkt (oder versucht es), als wäre es "Save", nicht "Save as"
2. es gibt immer wieder mal Zugriffsberechtigungsfehler
Kann jemand helfen?
Code: Alles auswählen
sub Speicherntestunfertig1
if (Not GlobalScope.BasicLibraries.isLibraryLoaded("Tools")) then
GlobalScope.BasicLibraries.LoadLibrary("Tools")
end if
dim document as object
dim dispatcher as object
Dim oDoc As Object
document = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
oDoc = ThisComponent
sDocURL = oDoc.getURL()
sDocPath = DirectoryNameoutofPath(sDocURL, "/")
sDocName = GetFileNameWithoutExtension(sDocURL, "/")
sDocExt = GetFileNameExtension(sDocURL, "/")
rem If oDoc.HasLocation() Then
rem Print "The Document URL is " & oDoc.getURL()
rem Else
rem Print "The document has not yet been stored"
rem End If
msgbox sDocPath
rem ----------------------------------------------------------------------
dim args1(1) as new com.sun.star.beans.PropertyValue
args1(0).Name = "URL"
args1(0).Value = sDocPath & "/" & sDocName & "." & sDocExt
dispatcher.executeDispatch(document, ".uno:SaveAs", "", 0, args1())
end sub
1. er speichert sie direkt (oder versucht es), als wäre es "Save", nicht "Save as"
2. es gibt immer wieder mal Zugriffsberechtigungsfehler
Kann jemand helfen?
Re: "Speichern unter" am alten Ort per Makro?
Du kannst es drehen, wenden oder formulieren wie du willst, aber letztlich entspricht: »speichern unter dem bereits benutzten Pfad« eben »speichern« … ergo Strg S oder wenns denn unbedingt per Makro sein soll:
Code: Alles auswählen
sub speichern
thisComponent.store(True)
End Sub
LO7.4.7.5 debian 12(bookworm) auf Raspberry4b 8GB (64bit)
LO24.8.0.3 flatpak debian 12(bookworm) auf Raspberry4b 8GB (64bit)
LO24.8.0.3 flatpak debian 12(bookworm) auf Raspberry4b 8GB (64bit)
Re: "Speichern unter" am alten Ort per Makro?
Hallo,
teste mal:
teste mal:
Code: Alles auswählen
Sub SpeichernDialog
'Arbeitsverzeichnis auslesen
oContext = GetProcessServiceManager().DefaultContext
oPathSettings = oContext.getValueByName("/singletons/com.sun.star.util.thePathSettings")
pfad=oPathSettings.Work
'URL des aktuellen Dokuments auslesen
url=ThisComponent.Url
if url<>"" then 'aktuelles Verzeichnis setzen falls vorhanden
aUrl=split(url,"/")
aUrl(ubound(aUrl))=""
pfad=join(aUrl,"/")
end if
'Speichern-Dialog aufrufen
Dialog=createunoservice("com.sun.star.ui.dialogs.FilePicker")
Dim Dialogtyp(0)
DialogTyp(0) =com.sun.star.ui.dialogs.TemplateDescription.FILESAVE_AUTOEXTENSION_PASSWORD_FILTEROPTIONS
'weitere Dialog-Typen: https://api.libreoffice.org/docs/idl/ref/namespacecom_1_1sun_1_1star_1_1ui_1_1dialogs_1_1TemplateDescription.html
Dialog.initialize( DialogTyp)
Dialog.displaydirectory=pfad
'Definition der einzusetzenden Filter.
Dialog.AppendFilter("Alle Dateien (*.*)", "*.*")
Dialog.AppendFilter("OOo Writer (*.odt)", "*.odt")
Dialog.AppendFilter("OOo Calc (*.ods)", "*.ods")
Dialog.AppendFilter("OOo Draw (*.odg)", "*.odg")
Dialog.AppendFilter("OOo Impress (*.odp)", "*.odp")
Dialog.SetCurrentFilter("Alle Dateien (*.*)")
Dialog.execute
End sub
Gruß,
mikele
mikele
Re: "Speichern unter" am alten Ort per Makro?
?? Das ist etwas anderes. Man kann im selben Pfad "speichern unter", wenn man etwa den Dateinamen oder das Format verändern will! Dass das aber immer einen völlig unzutreffenden anderen Pfad anbietet, weil zwischendurch eine andere Datei bearbeitet wurde, ist Unsinn!karolus hat geschrieben: ↑Mo 14. Apr 2025, 11:32Du kannst es drehen, wenden oder formulieren wie du willst, aber letztlich entspricht: »speichern unter dem bereits benutzten Pfad« eben »speichern« … ergo Strg S oder wenns denn unbedingt per Makro sein soll:Code: Alles auswählen
sub speichern thisComponent.store(True) End Sub
Re: "Speichern unter" am alten Ort per Makro?
Äh, nein, leider doch nicht. Nachdem ich in einem Fenster (A) damit richtig speichern konnte, wurde auch durch diesen Makros für die zuvor schon offene Datei in einem anderen Fenster (B) das Verzeichnis der Datei in A angeboten.
mikele hat geschrieben: ↑Mo 14. Apr 2025, 16:55Hallo,
teste mal:Code: Alles auswählen
Sub SpeichernDialog 'Arbeitsverzeichnis auslesen oContext = GetProcessServiceManager().DefaultContext oPathSettings = oContext.getValueByName("/singletons/com.sun.star.util.thePathSettings") pfad=oPathSettings.Work 'URL des aktuellen Dokuments auslesen url=ThisComponent.Url if url<>"" then 'aktuelles Verzeichnis setzen falls vorhanden aUrl=split(url,"/") aUrl(ubound(aUrl))="" pfad=join(aUrl,"/") end if 'Speichern-Dialog aufrufen Dialog=createunoservice("com.sun.star.ui.dialogs.FilePicker") Dim Dialogtyp(0) DialogTyp(0) =com.sun.star.ui.dialogs.TemplateDescription.FILESAVE_AUTOEXTENSION_PASSWORD_FILTEROPTIONS 'weitere Dialog-Typen: https://api.libreoffice.org/docs/idl/ref/namespacecom_1_1sun_1_1star_1_1ui_1_1dialogs_1_1TemplateDescription.html Dialog.initialize( DialogTyp) Dialog.displaydirectory=pfad 'Definition der einzusetzenden Filter. Dialog.AppendFilter("Alle Dateien (*.*)", "*.*") Dialog.AppendFilter("OOo Writer (*.odt)", "*.odt") Dialog.AppendFilter("OOo Calc (*.ods)", "*.ods") Dialog.AppendFilter("OOo Draw (*.odg)", "*.odg") Dialog.AppendFilter("OOo Impress (*.odp)", "*.odp") Dialog.SetCurrentFilter("Alle Dateien (*.*)") Dialog.execute End sub
Re: "Speichern unter" am alten Ort per Makro?
Manchmal geht es aber. Kann noch nicht genau sagen, welche Bedingung zieht. Es wäre aber schön, wenn der existierende Dateiname vorgeschlagen würde, ohne dass der Speichervorgang stattfindet.
Gruß,
A.
Re: "Speichern unter" am alten Ort per Makro?
Auch scheint die Änderung des Dateiformats (etwa von .pptx zu .odp) nicht zu funktionieren. Der makro hängt dann einfach.
Re: "Speichern unter" am alten Ort per Makro?
Hallo,
da fehlte aber noch einiges in meinem Makro (u. a. dass überhaupt etwas gespeichert wird
)
Neuer, erweiterter Verscuh:
da fehlte aber noch einiges in meinem Makro (u. a. dass überhaupt etwas gespeichert wird

Neuer, erweiterter Verscuh:
Code: Alles auswählen
Sub SpeichernDialog
'Arbeitsverzeichnis auslesen
oContext = GetProcessServiceManager().DefaultContext
oPathSettings = oContext.getValueByName("/singletons/com.sun.star.util.thePathSettings")
pfad=oPathSettings.Work
'aktuelles Dokument
oDoc=ThisComponent
'URL des aktuellen Dokuments auslesen
url=oDoc.Url
sName=""
if url<>"" then 'aktuelles Verzeichnis setzen falls vorhanden
aUrl=split(url,"/")
sName=convertFromUrl(aUrl(ubound(aUrl)))
aUrl(ubound(aUrl))=""
pfad=join(aUrl,"/")
end if
'Speichern-Dialog aufrufen
Dialog=createunoservice("com.sun.star.ui.dialogs.FilePicker")
Dim Dialogtyp(0)
DialogTyp(0) =com.sun.star.ui.dialogs.TemplateDescription.FILESAVE_AUTOEXTENSION
'weitere Dialog-Typen: https://api.libreoffice.org/docs/idl/ref/namespacecom_1_1sun_1_1star_1_1ui_1_1dialogs_1_1TemplateDescription.html
Dialog.initialize( DialogTyp)
Dialog.displaydirectory=pfad
'Definition der einzusetzenden Filter.
Dialog.AppendFilter("Alle Dateien (*.*)", "*.*")
Dialog.AppendFilter("Writer (*.odt)", "*.odt")
Dialog.AppendFilter("Calc (*.ods)", "*.ods")
Dialog.AppendFilter("Draw (*.odg)", "*.odg")
Dialog.AppendFilter("Impress (*.odp)", "*.odp")
Dialog.AppendFilter("Base (*.odb)", "*.odb")
If oDoc.supportsService("com.sun.star.sheet.SpreadsheetDocument") Then
Dialog.SetCurrentFilter("Calc (*.ods)", "*.ods")
ElseIf oDoc.supportsService("com.sun.star.text.TextDocument") Then
Dialog.SetCurrentFilter("Writer (*.odt)", "*.odt")
ElseIf oDoc.supportsService("com.sun.star.drawing.DrawingDocument") Then
Dialog.SetCurrentFilter("Draw (*.odg)", "*.odg")
ElseIf oDoc.supportsService("com.sun.star.presentation.PresentationDocuments") Then
Dialog.SetCurrentFilter("Impress (*.odp)", "*.odp")
ElseIf oDoc.supportsService("com.sun.star.sdb.OfficeDatabaseDocument") Then
Dialog.SetCurrentFilter("Base (*.odb)", "*.odb")
End If
Dialog.setDefaultName(sName)
result=Dialog.execute
if result=1 then 'Dialog wurde nicht abgebrochen
tmp=Dialog.getfiles
'Speichern unter
Dim arg()
oDoc.storeToUrl(tmp(0),arg())
end if
End sub
Gruß,
mikele
mikele
Re: "Speichern unter" am alten Ort per Makro?
Danke! Das scheint gut zu funktionieren.mikele hat geschrieben: ↑Mo 28. Apr 2025, 21:53Hallo,
da fehlte aber noch einiges in meinem Makro (u. a. dass überhaupt etwas gespeichert wird)
Neuer, erweiterter Verscuh:Code: Alles auswählen
...
Ein paar Kleinigkeiten wären noch schön, aber ich hoffe ja noch, dass LO in einer der kommenden Versi9onen wirklich wieder normal funktioniert.
Mir fällt etwas auf, dass dieses Makros die Datei richtig zum "Speichern unter" in ihrem bisherigen Verzeichnisn anbietet und so auch Umbenennungen zulässt. Im Gegensatz zum eigentlichen "Speichern unter" ist nach einen solchen Speichern mit Namensänderung (etwa: Ergänzung) die bearbeitete Datei weiterhin mit dem "alten" Namen versehen, nicht mit dem geänderten.
Das hat selbst Vor- und Nachteile und es wäre schön, wenn (auch) das klassische "Speichern unter" einen Schalter erhielte, mit dem man angeben kann, ob man den alten Namen beibehalten oder aber mit dem geänderten weiter arbeiten will.
Was zudem noch "fehlt" ist die Möglichkeit, auch das Dateiformat zu ändern - etwa zu docx. Wenn man derzeit eine docx-Datei aufruft und mit diesem Macro speichert, wird "docx" im Dateinamen angeboten, das Format aber bei ".odt" belassen, so dass der Name "xxx.docx.odt" resultiert.
Aber das sind Dinge, die erst relevant würden, wenn nicht bald eine Korrektur des wirklichen "Speichern unter" -Dialogs erfolgt
Erst einmal aber herzliches Danke!
An alle, die das LibreOffice-Forum gern nutzen und unterstützen wollen:
Bitte helfen Sie uns mit 7 Euro pro Monat.
Durch Ihren Beitrag tragen Sie dazu bei, unsere laufenden Kosten für die kommenden Monate zu decken.
Unkompliziert per Kreditkarte oder PayPal.
Als ein kleines Dankeschön werden Sie im LO-Forum als SUPPORTER gekennzeichnet.