🙏 Helfen Sie jetzt mit, unser LibreOffice Forum zu erhalten! 🙏
Mit Ihrer Spende sichern Sie den Fortbestand, den Ausbau und die laufenden Kosten dieses Forums. 🌱

🍀 Jeder Beitrag zählt – vielen Dank für Ihre Unterstützung!🍀

❤️ DANKE >> << DANKE ❤️

>> Dank Ihrer Unterstützung -> Keine Werbung für alle registrierten LibreOffice-Forum User! <<
🤗 Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet. 🤗

(gelöst) Makro, um dem Dateinamen eines LO-Dokuments ein Datum voranzustellen

Alles zur Programmierung im LibreOffice.
Benutzeravatar
karolus
* LO-Experte *
Beiträge: 2534
Registriert: Fr 10. Dez 2010, 10:01

Re: (gelöst) Makro, um dem Dateinamen eines LO-Dokuments ein Datum voranzustellen

Beitrag von karolus » Mo 14. Aug 2023, 14:50

Hallo

Code: Alles auswählen

Ich dacht´ mir:

»createUnoService« ist bekannt,
drum hab ich so genannt!

Was ist damit erreicht?
der Basic-User hat es Leicht!
LO7.4.7.5 debian 12(bookworm) auf Raspberry4b 8GB (64bit)
LO24.8.0.3 flatpak debian 12(bookworm) auf Raspberry4b 8GB (64bit)

Freischreiber
* LO-Experte *
Beiträge: 830
Registriert: Fr 28. Mär 2014, 10:41

Re: (gelöst) Makro, um dem Dateinamen eines LO-Dokuments ein Datum voranzustellen

Beitrag von Freischreiber » Mo 14. Aug 2023, 15:32

:lol:

Ich will »createUnoService« nicht verteufeln,
es ist für mich nur zum Verzweifeln.
Freischreiber nutzt seit 1/2025 LibreOffice Version 7.2.7.2 unter Windows 11 und SplitDB mit HSQL 2.7.4.
Lesenswert: https://wiki.documentfoundation.org/ReleasePlan/de

Benutzeravatar
karolus
* LO-Experte *
Beiträge: 2534
Registriert: Fr 10. Dez 2010, 10:01

Re: (gelöst) Makro, um dem Dateinamen eines LO-Dokuments ein Datum voranzustellen

Beitrag von karolus » Mo 14. Aug 2023, 16:04

Freischreiber hat geschrieben:
Mo 14. Aug 2023, 15:32
:lol:

Ich will »createUnoService« nicht verteufeln,
es ist für mich nur zum Verzweifeln.
nicht mal reimeln, kann der Deibel!
LO7.4.7.5 debian 12(bookworm) auf Raspberry4b 8GB (64bit)
LO24.8.0.3 flatpak debian 12(bookworm) auf Raspberry4b 8GB (64bit)

F3K Total
* LO-Experte *
Beiträge: 2501
Registriert: So 10. Apr 2011, 10:10

Re: Makro, um dem Dateinamen eines LO-Dokuments ein Datum voranzustellen

Beitrag von F3K Total » Do 17. Aug 2023, 17:11

Hallo zusammen,
auch wenn das Problem inzwischen gelöst ist und Karolus eine hervorragende function, die bei Weitem mehr kann als vom Fragesteller gewünscht war, geschrieben hat, möchte ich doch noch eine Verbesserung vorschlagen.
mikele hat geschrieben:
So 13. Aug 2023, 17:23
Hallo,
das liegt daran, dass .URL den Url-Syntax, .Title aber im Klartext liefert. Man könnte es z. B. so umgehen:
Ändere die Zeile
sPfad = replace(oDoc.url,oDoc.Title,"")
in
sPfad = replace(oDoc.url,mid(convertToUrl(oDoc.Title),9),"")
Ja, richtig, da war ein Fehler.
Ich habe mir inzwischen genau aus dem Grund das Pfade mit Leerzeichen Probleme haben, angewöhnt, keine Dateinamen mit Leezeichen mehr zu verwenden.
Das URL-Leerzeichen-Problem läßt sich auch wie folgt lösen:

Code: Alles auswählen

Sub DatumzuDateiname
	GlobalScope.BasicLibraries.LoadLibrary("Tools")
	dim oDoc as Object, msg1 as string, msg2 as string
	dim n as integer, sPfad as string, sURL as string, sDateiname as string, sNeuname as string, sDatum as string, sDatumneu as string
'	Dim mFileProperties(0) As New com.sun.star.beans.PropertyValue
	dim dummy()

	msg1 = "Sorry, das Dokument hat noch keine URL!"
	msg2 = "Bitte erst einmal speichern"
	oDoc = thisComponent
	
	if oDoc.url = "" then
	  msgbox (msg1 & chr(13) & msg2, 16, "Fehler")
	  exit sub
	end if

	sDateiname =	FileNameOutOfPath(oDoc.URL)
	msgbox sDateiname
	sDatum = date()
	sDatumneu = Format(sDatum, "YYYY-MM-DD")
	msgbox sDatumneu
	sNeuname = sDatumneu + " " + sDateiname
	msgbox sNeuname
	sPfad = replace(convertFromURL(oDoc.url),sDateiname,"")
	msgbox sPfad
	sURL = convertToURL(sPfad + sNeuname)
	msgbox sURL
'	mFileProperties(0).Name = "Overwrite"
'	mFileProperties(0).Value = True
'	oDoc.storeAsUrl(sURL, mFileProperties())
	oDoc.storeAsUrl(sURL, dummy())

End Sub
Also erst

Code: Alles auswählen

convertFromURL
dann wieder

Code: Alles auswählen

convertToURL
Gruß R
Windows 11: AOO, LO Linux Mint: AOO, LO

Freischreiber
* LO-Experte *
Beiträge: 830
Registriert: Fr 28. Mär 2014, 10:41

Re: Makro, um dem Dateinamen eines LO-Dokuments ein Datum voranzustellen

Beitrag von Freischreiber » Fr 18. Aug 2023, 09:08

F3K Total hat geschrieben:
Do 17. Aug 2023, 17:11

Also erst

Code: Alles auswählen

convertFromURL
dann wieder

Code: Alles auswählen

convertToURL
Gruß R
Hallo R,

das wars! Ich hatte sogar gesucht, ob es noch andere "convertto..." gibt außer "convertToURL". Nur hatte ich eben mit "convertto" gesucht und so natürlich nichts gefunden. Ich bin gar nicht dumm, ich habe nur sehr oft Pech beim Googeln. :mrgreen:

Vielen Dank
Freischreiber
Freischreiber nutzt seit 1/2025 LibreOffice Version 7.2.7.2 unter Windows 11 und SplitDB mit HSQL 2.7.4.
Lesenswert: https://wiki.documentfoundation.org/ReleasePlan/de

Benutzeravatar
karolus
* LO-Experte *
Beiträge: 2534
Registriert: Fr 10. Dez 2010, 10:01

Re: (gelöst) Makro, um dem Dateinamen eines LO-Dokuments ein Datum voranzustellen

Beitrag von karolus » Fr 18. Aug 2023, 12:48

Nur zur Ergänzung, die beiden Funktionen haben für python in libreoffice entsprechende Funktionen im unomodul

Code: Alles auswählen

uno.fileUrlToSystemPath( url )
##und
uno.systemPathToFileUrl( path )
eigentlich brauchts in python nur die erste, in die andere Richtung nimmst du besser gleich:

Code: Alles auswählen

from pathlib import Path
…
uri = Path(  …   ).as_uri()
LO7.4.7.5 debian 12(bookworm) auf Raspberry4b 8GB (64bit)
LO24.8.0.3 flatpak debian 12(bookworm) auf Raspberry4b 8GB (64bit)

Freischreiber
* LO-Experte *
Beiträge: 830
Registriert: Fr 28. Mär 2014, 10:41

Re: (gelöst) Makro, um dem Dateinamen eines LO-Dokuments ein Datum voranzustellen

Beitrag von Freischreiber » Di 20. Feb 2024, 14:41

So, ich hab mir das mit "keine Leerzeichen im Dateinamen" zu Herzen genommen und das Makro erweitert. Es ersetzt jetzt Leerzeichen im Dateinamen durch "_" und fragt hinterher auch noch, ob der ursprüngliche Dateiname gelöscht werden soll.

Code: Alles auswählen

Sub DatumzuDateiname
	GlobalScope.BasicLibraries.LoadLibrary("Tools")
	dim oDoc as Object, msg1 as string, msg2 as string
	dim n as integer, sPfad as string, sURLneu as string, sURLalt as string, sDateiname as string, sNeuname as string, sDatum as string, sDatumneu as string, sLoeschen as string
	dim dummy()

	msg1 = "Das Dokument hat noch keinen Dateinamen."
	msg2 = "Bitte zuerst einmal speichern."
	oDoc = thisComponent
	if oDoc.url = "" then
	  msgbox (msg1 & chr(13) & msg2, 16, "Fehler")
	  exit sub
	end if

	sDateiname =	FileNameOutOfPath(oDoc.URL)
	sURLalt = convertToURL(oDoc.URL)
	sDateinameunleer=Replace (sDateiname, " ", "_", 1,-1, False)  
	sDatum = date()
	sDatumneu = Format(sDatum, "YYYY-MM-DD")
	sNeuname = sDatumneu + "_" + sDateinameunleer
	sPfad = replace(oDoc.url,mid(convertToUrl(oDoc.Title),9),"")
	sURLneu = convertToURL(sPfad + sNeuname)

	oDoc.storeAsUrl(sURLneu, dummy())
	
	sLoeschen = MsgBox("Ursprüngliche Datei unwiderruflich löschen?" + Chr(13) + sDateiname, 4, "Achtung:")
	if sLoeschen = 6 then
		kill sURLalt
	endif

End Sub
Geht bestimmt schöner, funktioniert aber. Was bin ich stolz. :oops:

Weiß übrigens jemand etwas Sanfteres als "kill"? Wo die Datei im Papierkorb landet, statt spurlos zu verschwinden?

Gruß
Freischreiber
Freischreiber nutzt seit 1/2025 LibreOffice Version 7.2.7.2 unter Windows 11 und SplitDB mit HSQL 2.7.4.
Lesenswert: https://wiki.documentfoundation.org/ReleasePlan/de


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.



Antworten