🙏 Helfen Sie 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. 🤗

Click-Ereigniss? abfangen

Alles zur Programmierung im LibreOffice.
StefKe
Beiträge: 62
Registriert: Sa 5. Nov 2022, 18:47

Click-Ereigniss? abfangen

Beitrag von StefKe » Do 25. Jul 2024, 20:18

Hallo, ich möchte gern bei Eingabe von

Code: Alles auswählen

IMG_20240722_144828.jpg
in die Zelle A1 den Wert in

Code: Alles auswählen

22.07.24 14:48:28
ändern. In MS Office kann dazu das Click-Ereigniss verwendet werden. Gibt es ein Pendant in LO? Wie wird es angewendet?

Danke - Stefan

nitja
Beiträge: 190
Registriert: Di 20. Okt 2020, 15:55

Re: Click-Ereigniss? abfangen

Beitrag von nitja » Fr 26. Jul 2024, 19:29

Es gibt kein direktes Clkick-Ereignis in LO.
Aber: ein Click löst gleichzeitig 4 Select-Ereignisse mit identischen Werten für die/das geklickte Zelle/Objekt aus. Das kann man abfragen/abfangen. Funktioniert in meinen Anwendungen perfekt.
LO 24.2.0.3 (X86_64) auf Linux 6.6.26-1-MANJARO, gnome 45.4, (gtk 4) gtk3 für LO

Pit Zyclade
* LO-Experte *
Beiträge: 3041
Registriert: Mo 12. Nov 2012, 16:59

Re: Click-Ereigniss? abfangen

Beitrag von Pit Zyclade » So 28. Jul 2024, 11:04

Egal, schon wieder eine neue Rechtschreibung? Click-Ereigniss ???

Kannst du mal beschreiben, was du da berichtet hast? Wenn man in der Tabelle den Bilddateinamen eingibt und drauf klickt wird was angezeigt? Das Erstellungsdatum? Das Kopierdatum? Das Tagesdatum mit Uhrzeit?
Was sollte mir das nutzen?
LO 24.8.7.2 (X86_64) / Windows 11 64bit
Problem gelöst? Dann bitte im Betreff der ersten Nachricht [gelöst] voranstellen.

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

Re: Click-Ereigniss? abfangen

Beitrag von mikele » So 28. Jul 2024, 11:35

Hallo,
1) wenn z. B. in A1 der Text

Code: Alles auswählen

IMG_20240722_144828.jpg
steht, dann könntest du in B1 folgende Formel verwenden

Code: Alles auswählen

=DATUMWERT(REGAUS(A1;"IMG_(....)(..)(..).*";"$1-$2-$3"))+ZEITWERT(REGAUS(A1;"IMG_.*_(..)(..)(..).*";"$1:$2:$3"))
um daraus ein Datum+Zeit zu generieren.
2) Möchtest es hingegen per Makro die EIngabe in A1 in ein Datumswert umwandeln (und damit die EIngabe "vernichten") könntest du das Tabellenereignis "Inhalt geändert" ausnutzen.
3) Wenn es beim Anklicken der Zelle oder der Auswahl der Zelle per Tastatur passieren soll könntets du das Tabellenereignis "Auswahl geändert" ausnutzen.
Die Nummer 2 entspricht am ehesten deiner Beschreibung. Allerdings verstehe ich nicht, warum man erst ""IMG_20240722_144828.jpg" eintippt, um dann daraus "22.07.24 14:48:28" zu machen. Dann kann mann doch gleich "22.07.24 14:48:28" eintippenn???
Gruß,
mikele

StefKe
Beiträge: 62
Registriert: Sa 5. Nov 2022, 18:47

Re: Click-Ereigniss? abfangen

Beitrag von StefKe » So 28. Jul 2024, 19:23

Hallo, danke...
@Pit: das mit der Rechtschreibungistmanchmalbisschenschwierig :-) tut mir leid :oops:

@nitja: es handelt sich um Bilder von Strom- und Wasserzähler welche mit den Smartphone aufgenommen werden. Der Zeitstempel der Ablesung soll per Copy und Paste des Dateinamens erfasst werden.
Die Variant 2 trifft genau das Ziel. O.k. dann versuche ich es mit 'Inhalt geändert'...

Danke - Stefan

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

Re: Click-Ereigniss? abfangen

Beitrag von mikele » So 28. Jul 2024, 22:36

Hallo,
ich habe mal ein bisschen mit der Zwischenablage und Python gespielt.
Folgendes Makro sollte sich den kopierten Dateinamen (der dann noch in der Zwischenablage hängt) hernehmen, das Datum extrahieren und dann in die aktuell ausgewählte Zelle schreiben - also nicht erst den Dateinamen einfügen und dann ändern.

Code: Alles auswählen

import uno

def createUnoService(serviceName):
    sm = uno.getComponentContext().ServiceManager
    return sm.createInstanceWithContext(serviceName, uno.getComponentContext())

    
def zwischenablage_text():
    oClip = createUnoService("com.sun.star.datatransfer.clipboard.SystemClipboard")
    DataObj= createUnoService("com.sun.star.datatransfer.clipboard.XTransferable")
    DataObj= oClip.getContents()
    DataTypSeq=DataObj.getTransferDataFlavors()
    tmp=''
    for art in DataTypSeq:
        if art.MimeType[:10]=='text/plain':
            tmp=DataObj.getTransferData(art)
    return tmp

def datum_aus_Dateiname():
    doc = XSCRIPTCONTEXT.getDocument()
    zelle=doc.CurrentSelection
    txt=zwischenablage_text()
    if txt[:4]=='IMG_' and txt[-4:]=='.jpg':
        datum=txt[4:8]+'-'+ txt[8:10]+'-'+ txt[10:12]
        zelle.FormulaLocal = datum
    
Das Ganze ist nur grob gestestet und nicht robust ...
Gruß,
mikele

StefKe
Beiträge: 62
Registriert: Sa 5. Nov 2022, 18:47

Re: Click-Ereigniss? abfangen

Beitrag von StefKe » So 28. Jul 2024, 22:42

Boah, schau ich morgen an... :D

Danke - Stefan

StefKe
Beiträge: 62
Registriert: Sa 5. Nov 2022, 18:47

Re: Click-Ereigniss? abfangen

Beitrag von StefKe » Mo 29. Jul 2024, 09:42

Moin, das Makro läuft perfekt. Ich habe den Namen der Funktion noch geändert:

Code: Alles auswählen

def datum_aus_Dateiname(*arg):
sonst gibt es eine Fehlermeldung.

PS: gibt es zur Funktionsweise von:

Code: Alles auswählen

def createUnoService(serviceName):
    sm = uno.getComponentContext().ServiceManager
    return sm.createInstanceWithContext(serviceName, uno.getComponentContext())
irgendwo ein Tutorial für völlige Dummies? Mit der Anwendung der API etc. stehe ich irgendwie völlig auf dem Schlauch....

Danke - Stefan

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

Re: Click-Ereigniss? abfangen

Beitrag von karolus » Mo 29. Jul 2024, 09:53

Hallo

Das ganze mal anders rum gedacht, … zuerst die Zielzelle auswählen und dann die …jpg-datei per Dialog:

Code: Alles auswählen

from pathlib import Path
from uno import fileUrlToSystemPath as uri2path
from datetime import datetime as dt

createUnoService = XSCRIPTCONTEXT.ctx.ServiceManager.createInstance


def jpg_timestamp_via_file_dialog(*_):

    doc = XSCRIPTCONTEXT.getDocument()
    sel = doc.CurrentSelection
    
    dialog = createUnoService("com.sun.star.ui.dialogs.FilePicker")
    dialog.DisplayDirectory= (Path.home() / "Pictures" / "Neu").as_uri()
    dialog.Title = "…jpg … Auswahl"
    dialog.appendFilter("JPG", "*.jpg")
    if dialog.execute():
        try:
            file_name = Path( uri2path( dialog.Files[0] ) ).name
            _date = dt.strptime(file_name ,"IMG_%Y%m%d_%H%M%S.jpg")
            sel.FormulaLocal= f"{_date:%Y-%m-%d %H:%M:%S}"
        except ValueError:
            sel.String = "Datei-name passt nicht"
LO7.4.7.5 debian 12(bookworm) auf Raspberry4b 8GB (64bit)
LO24.8.0.3 flatpak debian 12(bookworm) auf Raspberry4b 8GB (64bit)

StefKe
Beiträge: 62
Registriert: Sa 5. Nov 2022, 18:47

Re: Click-Ereigniss? abfangen

Beitrag von StefKe » Mo 29. Jul 2024, 09:59

Wenn das nicht kreativ ist, was dann? ;)
Ich hab es dem 'Doppelklick' zugeordnet - läuft!

Danke - Stefan


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