🙏 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] Zwischenablage

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

Re: Zwischenablage

Beitrag von karolus » Mo 19. Mär 2012, 16:57

Hallo
Ändere die Zeile: cliptext = stext zu:

Code: Alles auswählen

cliptext = replace( stext, "  ", " " )
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 » Di 20. Mär 2012, 10:21

Hallo,

das funktioniert schon sehr gut, bis auf die letzte Spalte.
Karo ich danke Dir, das du so geduldig bist mit mir.

Ich habe ein wenig probiert und ich konnte den Fehler nicht beheben,
dass die letzte Spalte nicht richtig eingefügt wird.

Hier der aktuelle Code, die Anzahl für die Datenblöcke habe ich in der
ersten Spalte drin gelassen.

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 = replace( 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())
        
        'Anzahl Blöcke
        'tmp() = split( liste(0), " " , 2)
        'liste(0) = split( tmp(1), " ")
        
        'Inkl. Blockanzahl
        liste(0) = split(liste(0), " ")
        
        endcol = ubound(liste(0))
        for i = 1 to endrow
           if len(liste(i)) then
              'liste(i) = split( liste(i), " ", endcol +1 )
              liste(i) = split( liste(i), " ")
           else
              liste(i) = split( space( endcol ), " ")
           end if
        next i
        range = sheet.getCellrangeByPosition( c, r, c + endcol, r + endrow)
        range.setFormulaArray( liste())
       
    end sub
Zum Testen hier eine Kurzform der Daten.

Code: Alles auswählen

4 Stat WSP
    0.001   71.700
    0.002   71.699
   12.452   71.717
   12.453   71.717


    0.001   71.750
    0.002   71.748
   12.452   71.772
   12.453   71.774
Gruß DAP

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

Re: Zwischenablage

Beitrag von karolus » Di 20. Mär 2012, 10:52

Hallo
Anscheinend enthalten die Datenzeilen aus deiner Zwischenablage führende Leerzeichen - die kannst du mit trim( text ) entfernen:

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 = replace( 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( trim(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
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 » Di 20. Mär 2012, 11:52

Hallo,

wenn ich jetzt die Daten einfügen möchte bleibt er schon bei der ersten eingefügten
Zeile hängen.

Funktioniert bei dir das Einfügen der Beispieldaten?

Gruß DAP

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

Re: Zwischenablage

Beitrag von karolus » Di 20. Mär 2012, 13:38

Hallo

Ja, der Code aus meinen Antwort läuft mit den Daten aus deiner vorletzten Antwort.

Aber da sind vor jeder Datenzeile je 2 Leerzeichen und 2 geschützte Leerzeichen ! - aus welcher Anwendung kommen die Daten ?
Kann man der Anwendung nicht beibringen die Daten in geeigneter Form in eine Textdatei zu exportieren ?

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

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

Re: Zwischenablage

Beitrag von karolus » Di 20. Mär 2012, 13:45

Hallo
Teste bei dir nochmal mit
liste() = split( liste, chr( 13 ))
statt ...chr( 10 )

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 » Di 20. Mär 2012, 14:35

Hallo,

die ersten Spalten werden alle richtig eingefügt, nur die letzte nicht.
Ich habe LO 3.5 auf Win7.

Die Daten stammen leider aus einem externen Programm (schon etwas älter),
da hab ich keine Möglichkeit etwas zu verändern.

Ich habe dir einen Screenshot angehangen, darin siehst Du, wie die Daten
bei mir eingefügt werden und welche Fehlermeldung bei mir kommt.

Das Ändern des Zeilenvorschubs (chr(13)) hilft leider auch nicht.

Gruß DAP
Dateianhänge
Zwischenablage03.jpg
Zwischenablage03.jpg (85.44 KiB) 6123 mal betrachtet

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

Re: Zwischenablage

Beitrag von karolus » Di 20. Mär 2012, 15:39

Hallo

Letzter Versuch:
...
if len(liste(i)) > 4 then 'in rot hinzufügen
liste(i) = left( liste(i) , len(liste(i)-1) ' in rot einfügen
liste(i) = split( trim(liste(i)), " ", endcol +1 )
else
....
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 » Di 20. Mär 2012, 16:33

Hallo Karo,

die Idee mit dem entfernen des letzten Zeichens war die Lösung für die letzte Spalte.

Die Fehlermeldung kam, da die Abfrage auf leere Zeilen mit len(liste(i)) immer true ergab.
Mit len(liste(i) > 1) läuft es jetzt fehlerfrei.
(hat sich nach deiner Änderung erledigt)

Vielen Dank noch mal für Deine Beharrlichkeit.

Eine Frage noch an Dich, wie kann ich nur die obere linke Zelle des aktuell markierten Bereiches
per makro auswählen, damit es nicht zu einem Rangefehler kommt, falls mehrer Zellen markiert
sind.

Gruß DAP

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

Re: [gelöst] Zwischenablage

Beitrag von karolus » Di 20. Mär 2012, 17:03

Hallo
..
address = sel.getRangeAddress()
c = address.StartColumn : r = address.StartRow
..
funktioniert sowohl bei Selektion einer einzelnen Zelle als auch bei einer Bereichsselektion.

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


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