🙏 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!🍀

❤️ 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] Zwischenablage

Alles zur Programmierung im LibreOffice.
DAP
Beiträge: 41
Registriert: Mo 20. Feb 2012, 20:40

[gelöst] Zwischenablage

Beitrag von DAP » Fr 16. Mär 2012, 12:31

Hallo,

ich möchte gerne Daten aus der Zwischenablage per Makro mit ".uno:PasteSpecial" einfügen lassen.
Ich finde aber leider keine Möglichkeit, wie man die Einstellung für die Feldtrenner (bei mir Leerzeichen)
und die Zusammenfassung von Feldtrennern per Makro einstellen und den Dialog beenden kann.

Noch besser wäre, der Dialog wird erst gar nicht angezeigt.

Vielleicht kann mir einer von Euch helfen.
Zuletzt geändert von DAP am Di 20. Mär 2012, 16:51, insgesamt 1-mal geändert.

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

Re: Zwischenablage

Beitrag von karolus » Fr 16. Mär 2012, 16:12

Hallo

Evtl. hilft dir dieser Beitrag

Karo
LO7.4.7.5 debian 12(bookworm) auf Raspberry4b 8GB (64bit)
LO24.8.0.3 flatpak debian 12(bookworm) auf Raspberry4b 8GB (64bit)

Frieder
Beiträge: 28
Registriert: Di 13. Dez 2011, 12:28
Kontaktdaten:

Re: Zwischenablage

Beitrag von Frieder » Fr 16. Mär 2012, 17:31

Hallo DAP

Ich habe auf meiner Makro-Seite 3 Makros zum Umgang mit der Zwischenablage(ohne Dispacher)
Eventuell hilft dir ja das Makro Text aus Zwischenablage.

Wenn du etwas genauer schildern würdest, was du eigentlich machen willst, kann ich dir wahrscheinlich besser helfen.
In der Regel ist es besser, und einfacher, wenn du die Zwischenablage überhaupt nicht benutzt,
sondern eine andere Makro Lösung verwendest.

Gruß Frieder

DAP
Beiträge: 41
Registriert: Mo 20. Feb 2012, 20:40

Re: Zwischenablage

Beitrag von DAP » Sa 17. Mär 2012, 20:29

Hallo,

vielen Dank für Eure Bemühungen.
ich denke der Link von Karo könnte mich schon etwas weiter bringen.
Frieder hat geschrieben: Wenn du etwas genauer schildern würdest, was du eigentlich machen willst, kann ich dir wahrscheinlich besser helfen.
In der Regel ist es besser, und einfacher, wenn du die Zwischenablage überhaupt nicht benutzt,
sondern eine andere Makro Lösung verwendest.
Ich habe Daten aus einer anderen Anwendung (leider nur über die Zwischenablage), die folgendermaßen
aussehen (kleiner Auszug):

" 4 mpm stat abst Bemerkung
0.001 1.20 2.33 KOK
0.002 3.45 1.66 KUK
0.003 5.20 2.33 2356 KOK
0.004 6.45 4.56 2356

0.001 1.20 2.33 KOK
0.002 3.45 1.66 KUK
0.003 5.20 2.33 559
0.004 6.45 4.56 456"

Die erste Zeile ist die Spaltenbeschriftung, wobei die 4 für die Anzahl der Datenreihen pro Ausgabeblock steht.

Ich dachte, ich könnte die Funktionen verwenden, die auch beim einfügen über den Dialog angeboten werden.
Z.B. die Leerzeichentrenner zusammenfassen, die Behandlung der Zahlen als englische Zahlennotation mit dem
"." statt dem "," und die Bemerkungen, die bei Leerzeichen nicht aufgesplittet werden sollen.


Gruß DAP

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

Re: Zwischenablage

Beitrag von karolus » Sa 17. Mär 2012, 22:33

Hallo

Achtung Python!

Code: Alles auswählen

import uno

context = XSCRIPTCONTEXT
ctx = uno.getComponentContext()
servicemanager = ctx.ServiceManager
createUnoService = servicemanager.createInstance


def cliptext():
    oclip = createUnoService("com.sun.star.datatransfer.clipboard.SystemClipboard")
    oConverter = createUnoService("com.sun.star.script.Converter")
    oData = oclip.getContents()
    oTypes = oData.getTransferDataFlavors()
    for elem in oTypes:
        if elem.MimeType == "text/plain;charset=utf-16" :
            stext = oData.getTransferData( elem )
            stext = oConverter.convertToSimpleType( stext, 12 )
            return '{0:s}'.format(stext.encode('utf8'))     
        

def paste_lines_to_rows(dummy=None):
    doc, sel, sheet = rangeselection()
    address = sel.getCellAddress()
    c, r = address.Column, address.Row
    liste = cliptext()
    liste = liste.splitlines()
    header = liste[0].split()
    header = header[1:]
    maxsplit = len(header) -1
    makesetarray( sheet, (tuple( header ),), c, r )
    r += 1
    for line in liste[1:]:
        if line:
            out = (tuple( line.split(' ', maxsplit )),)
            makesetarray( sheet, out, c, r )
        r += 1
   


    

def rangeselection():
    doc = context.getDocument()
    sel = doc.getCurrentSelection()
    sheet  = sel.getSpreadsheet()
    return doc , sel , sheet

def makesetarray( sheet , olist,startcol=0,startrow=0):
    endrow = len( olist ) -1 + startrow
    endcol = len( olist[0] )-1 + startcol
    oRange = sheet.getCellRangeByPosition(startcol, startrow,
                                          endcol , endrow)
    oRange.setFormulaArray( olist )
Schau dir die angehängte Datei mit eingebettetem Pythonscript an, eingefügt wird ab der aktuell selektierten Zelle.
Edit :Änderungen im Code und in der angehängten Datei 22:45
Karo
Dateianhänge
paste_special.ods
(12.49 KiB) 386-mal heruntergeladen
LO7.4.7.5 debian 12(bookworm) auf Raspberry4b 8GB (64bit)
LO24.8.0.3 flatpak debian 12(bookworm) auf Raspberry4b 8GB (64bit)

DAP
Beiträge: 41
Registriert: Mo 20. Feb 2012, 20:40

Re: Zwischenablage

Beitrag von DAP » So 18. Mär 2012, 21:00

Hallo Karo,

ich kann die scripts in der Datei weder ausführen noch bearbeiten, wo
kann ich das einstellen? Sicherheit habe ich schon auf niedrig gestellt.

Gruß DAP

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

Re: Zwischenablage

Beitrag von karolus » So 18. Mär 2012, 22:16

Hallo
zuerst musst du die Datei speichern, dann ggf. unter →Extras→Optionen→LO→Sicherheit→Makrosicherheit [x}Mittel einstellen.
Dann sollte in der geöffneten Datei→Extras→Makros→Makros ausführen→paste_special.ods→clip_to_calcrange→paste_lines_to_rows ausführbar sein ?

Alternativ kannst du auch den Quellcode aus meiner letzten Antwort editieren und speichern unter ~/3/user/Scripts/python/Name_deiner_Wahl.py . (siehe →Extras→Optionen→LO→Pfade )
Den Ordner python musst du vmtl. erst erstellen

Karo
LO7.4.7.5 debian 12(bookworm) auf Raspberry4b 8GB (64bit)
LO24.8.0.3 flatpak debian 12(bookworm) auf Raspberry4b 8GB (64bit)

DAP
Beiträge: 41
Registriert: Mo 20. Feb 2012, 20:40

Re: Zwischenablage

Beitrag von DAP » So 18. Mär 2012, 22:31

Hallo Karo,

es tut mir Leid, aber ich kann weder python scripte ausführen, noch bearbeiten und auch
nicht neu erstellen. Den Pfad habe ich angelegt wie beschrieben. Die Button erstellen und
bearbeiten sind gar nicht aktivierbar. Basic Makros kann ich hingegen bearbeiten und erstellen.

Gruß DAP

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

Re: Zwischenablage

Beitrag von karolus » Mo 19. Mär 2012, 11:21

Hallo

Ok, das ganze nochmal in Basic:

Code: Alles auswählen

function cliptext()
    oclip = createUnoService("com.sun.star.datatransfer.clipboard.SystemClipboard")
    oConverter = createUnoService("com.sun.star.script.Converter")
    oData = oclip.getContents()
    oTypes = oData.getTransferDataFlavors()
    for e = 0 to ubound(oTypes)
        if oTypes(e).MimeType = "text/plain;charset=utf-16" then
            stext = oData.getTransferData( oTypes(e) )
            stext = oConverter.convertToSimpleType( stext, 12 )
            cliptext = stext
            exit function
        end if
    next
end function     
        

    

sub paste_lines_to_rows()

    doc = thisComponent
    sel = doc.getCurrentSelection()
    sheet = sel.getSpreadsheet()
    address = sel.getCellAddress()
    c  = address.Column : r = address.Row
    liste = cliptext()
    liste() = split( liste, chr(10))
    endrow = ubound(liste())
    tmp() = split( liste(0), " " , 2)
    liste(0) = split( tmp(1), " ")
    endcol = ubound(liste(0))
    for i = 1 to endrow
    	if len(liste(i)) then
    		liste(i) = split( liste(i), " ", endcol +1 )
    	else
    		liste(i) = split( space( endcol ), " ")
    	end if 
    next i
    range = sheet.getCellrangeByPosition( c, r, c + endcol, r + endrow )
    range.setFormulaArray( liste())
    
end sub
Funktioniert das?

Karo
LO7.4.7.5 debian 12(bookworm) auf Raspberry4b 8GB (64bit)
LO24.8.0.3 flatpak debian 12(bookworm) auf Raspberry4b 8GB (64bit)

DAP
Beiträge: 41
Registriert: Mo 20. Feb 2012, 20:40

Re: Zwischenablage

Beitrag von DAP » Mo 19. Mär 2012, 15:56

Hallo Karo,

vielen Dank für deine Bemühungen, es funktioniert bis auf die letzte Zeile, aber die
Daten werden eingefügt, obwohl folgende Fehlermeldung kommt.

Type: com.sun.star.uno.RuntimeException
Message: .

Eine Kleinigigkeit gibt es noch, wenn aufeinander folgende Leerzeichen
auftreten, dann müssen diese als ein Trenner behandelt werden,
da sonst die Spalten durcheinander kommen.
Bei meinem Beispieldatensatz s.o. wurden die doppelten Leerzeichen leider
"wegformatiert".

Gruß DAP


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