Seite 1 von 2

Click-Ereigniss? abfangen

Verfasst: Do 25. Jul 2024, 20:18
von StefKe
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

Re: Click-Ereigniss? abfangen

Verfasst: Fr 26. Jul 2024, 19:29
von nitja
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.

Re: Click-Ereigniss? abfangen

Verfasst: So 28. Jul 2024, 11:04
von Pit Zyclade
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?

Re: Click-Ereigniss? abfangen

Verfasst: So 28. Jul 2024, 11:35
von mikele
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???

Re: Click-Ereigniss? abfangen

Verfasst: So 28. Jul 2024, 19:23
von StefKe
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

Re: Click-Ereigniss? abfangen

Verfasst: So 28. Jul 2024, 22:36
von mikele
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 ...

Re: Click-Ereigniss? abfangen

Verfasst: So 28. Jul 2024, 22:42
von StefKe
Boah, schau ich morgen an... :D

Danke - Stefan

Re: Click-Ereigniss? abfangen

Verfasst: Mo 29. Jul 2024, 09:42
von StefKe
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

Re: Click-Ereigniss? abfangen

Verfasst: Mo 29. Jul 2024, 09:53
von karolus
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"

Re: Click-Ereigniss? abfangen

Verfasst: Mo 29. Jul 2024, 09:59
von StefKe
Wenn das nicht kreativ ist, was dann? ;)
Ich hab es dem 'Doppelklick' zugeordnet - läuft!

Danke - Stefan