🙏 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.
mikele
* LO-Experte *
Beiträge: 1930
Registriert: Mo 1. Aug 2011, 20:51

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

Beitrag von mikele » Sa 12. Aug 2023, 17:25

Hallo,
karolus hat mich mal wieder inspiriert, mich an Python heran zu machen ...
Der Knackpunkt ist die Eigenschaft .title. Sie zu ändern, ändert nicht den Dateinamen. Daher mein Vorschlag:

Code: Alles auswählen

def isodate_prefix_direkt( *_ ):
    iso_date = date.today().isoformat()
    doc = XSCRIPTCONTEXT.getDocument()
    if not doc.hasLocation():
        return
    url = doc.URL.split("/")
    anfang = url[-1][:10]
    try:
        date.fromisoformat(anfang)
        url[-1] = url[-1][11:]
    except:
        pass
    url[-1]=f"{iso_date}_{url[-1]}"
    doc.storeAsURL("/".join(url),())
Es wird getestet, ob der Dateiname mit einem Datum beginnt und in diesem Fall wird das Datum durch das aktuelle ersetzt.
@karolus: Gibt es eine bessere Art herauszufinden, ob die ersten 10 Zeichen eines Strings ein Datum darstellen?
Gruß,
mikele

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

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

Beitrag von karolus » Sa 12. Aug 2023, 18:59

Hallo
@Mikele:
Statt die URL zu splitten kannst du einfach:

Code: Alles auswählen

doc = XSCRIPTCONTEXT.getDocument()
name = doc.Title
try:
    date.fromisoformat(name[:10])
    doc.Title = name[10:]
except ValueError:
    pass
print(doc.Title)
LO7.4.7.5 debian 12(bookworm) auf Raspberry4b 8GB (64bit)
LO24.8.0.3 flatpak debian 12(bookworm) auf Raspberry4b 8GB (64bit)

mikele
* LO-Experte *
Beiträge: 1930
Registriert: Mo 1. Aug 2011, 20:51

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

Beitrag von mikele » Sa 12. Aug 2023, 19:33

Hallo,
@karolus: das Dilemma das ich sehe ist, dass der Titel auch unabhängig von der Url gesetzt werden kann. Ich kann also nicht davon ausgehen, dass der Titel auch wirklich den Dateinamen widerspiegelt (auch wenn es wahrscheinlich eher ein akademischer Fall ist). Eine Änderung des Titels ändert auch den Dateinamen nicht.
Gruß,
mikele

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

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

Beitrag von karolus » Sa 12. Aug 2023, 22:37

Hallo
Ich hab nochmal aufgeräumt und Kommentare reingeschrieben, ich hoffe das pass so.
(bei einem noch nicht gespeicherten Dokument wird zunächst nur der normale Dialog ausgeführt ohne prefix )

Code: Alles auswählen

from datetime import date
from pathlib import Path
import uno

context = uno.getComponentContext()
createUnoService = context.ServiceManager.createInstance

    
def isodate_prefix_direkt( *_ ):
    iso_date = date.today().isoformat()
    doc = XSCRIPTCONTEXT.getDocument()    
    if not doc.hasLocation():
        # das Dokument wurde noch nicht gespeichert,
        # wir biegen ab in den normalen »speichern«-dialog
        frame = doc.CurrentController.Frame
        dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
        dispatcher.executeDispatch(frame, ".uno:Save","", 0, (),)
        return # und beenden hier
    
    path = Path(uno.fileUrlToSystemPath(doc.URL))
    name = path.name
        
    if name.startswith(iso_date):
        # datei wurde bereits mit dem aktuellen
        # Datums-prefix gespeichert
        doc.store() # normal speichern
        return      # und Ausführung beenden
    
    try: # datei hat ein iso_date-prefix, aber nicht aktuell!
        date.fromisoformat(name[:10])
        name = name[11:] # prefix mit **_** entfernen
    except ValueError:
        pass
    
    doc.Title = f"{iso_date}_{name}"
    uri = path.with_stem(f"{doc.Title}").as_uri()
    doc.storeAsURL(uri ,(),)
    
        
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 » So 13. Aug 2023, 09:55

Moin,
Freischreiber hat geschrieben:
Sa 12. Aug 2023, 14:26
F3K Total hat geschrieben:
Sa 12. Aug 2023, 08:48
Funktioniert bei mir einwandfrei.
Es scheitert an Leerzeichen. Aus "Unbenannt 1.odt" wird "Unbenannt 1.odt2023-08-12 Unbenannt 1.odt". Beim Ersetzen durch "" wird nach Leerzeichen gesucht, da steht dann aber schon "%20".* Und dann wird nicht ersetzt :o

*oder umgekehrt :?
Keine Ahnung was du da machst, auf alle Fälle wird nicht nach dem Leerzeichen, sondern nach dem Dateinamen gesucht.
Da steht dann zwar %20 für das Leerzeichen, die Datei wird richtig gespeichert.
Du hast es nicht ausprobiert, denn wie ich oben schon geschrieben habe, funktioniert das Makro bei mir sowohl unter Windows 10 als auch unter Linux Mint. :roll:

R
Dateianhänge
FS.png
FS.png (21.19 KiB) 3986 mal betrachtet
Windows 11: AOO, LO Linux Mint: AOO, LO

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

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

Beitrag von Freischreiber » So 13. Aug 2023, 14:09

Du hast es nicht ausprobiert, denn wie ich oben schon geschrieben habe, funktioniert das Makro bei mir sowohl unter Windows 10 als auch unter Linux Mint. :roll:
"FS_Test.odt" funktioniert bei mir auch. Da ist ja auch kein Leerzeichen drin. Anders sieht es mit "FS Test.odt" aus:
Das wird zu: "FS Test.odt2023-08-13 FS Test.odt"
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

mikele
* LO-Experte *
Beiträge: 1930
Registriert: Mo 1. Aug 2011, 20:51

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

Beitrag von mikele » 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),"")
Gruß,
mikele

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

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

Beitrag von Freischreiber » Mo 14. Aug 2023, 09:30

Hallo mikele,
sPfad = replace(oDoc.url,mid(convertToUrl(oDoc.Title),9),"")
Die 9, damit die ersten acht Zeichen (file:///) abgeschnitten werden? OK. Es funktioniert!

Das Python-Makro speichere ich auch, aber da verstehe ich noch viel weniger als bei BASIC. Am Anfang hatte ich den Eindruck, Python sei kürzer, aber am Ende war es doch nicht so. :|

Danke an alle!

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

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

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

Beitrag von karolus » Mo 14. Aug 2023, 10:57

Freischreiber hat geschrieben:
Mo 14. Aug 2023, 09:30
Das Python-Makro speichere ich auch, aber da verstehe ich noch viel weniger als bei BASIC. Am Anfang hatte ich den Eindruck, Python sei kürzer, aber am Ende war es doch nicht so. :| Freischreiber
Naja ich habs erweitert um die Spezial-Fälle →neues Dokument erstmalig (dann bleibt der Name aber dir überlassen )… und bei einem bereits mit alten Datumsprefix gespeicherten das alte prefix zu entfernen zusammen mit zusätzlichen Kommentaren die das direkt an der Stelle erklären, was möchtest du noch?… soll ich ein Gedicht dazu schreiben :roll:
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: 831
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, 14:30

Nein, alles gut, vielen Dank.
soll ich ein Gedicht dazu schreiben
Nur wenn du möchtest.

Ich hatte gehofft, es geht ohne die Herbeirufung von Geistern, die mich in BASIC immer so irritieren (context = uno.getComponentContext(), createUnoService = context.ServiceManager.createInstance usw.)

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