BITTE helfen Sie uns HEUTE mit einer SPENDE
Helfen Sie das OpenOffice Forum zu erhalten!

DANKE >><< DANKE

> KEINE WERBUNG FÜR REGISTRIERTE BENUTZER!<
Ihre Spende wird für die Deckung der laufenden Kosten sowie den Erhalt und Ausbau 🌱 des OpenOffice Forums verwendet.
🤗 Als Dankeschön werden Sie im Forum als OO-SUPPORTER gekennzeichnet. 🤗

Löschen von doppelten Zeilen per Makro

Alles zur Programmierung im OpenOffice.org
karolus
Beiträge: 651
Registriert: Di 23. Feb 2010, 12:07

Re: Löschen von doppelten Zeilen per Makro

Beitrag von karolus » Mo 6. Mär 2017, 12:42

Hallo
Es amüsiert mich immer wieder wie leicht sowas in python mit weniger API und weniger Codezeilen geht, und am Ende noch deutlich schneller läuft:

Code: Alles auswählen

def filter_selection(*_):
    doc = XSCRIPTCONTEXT.getDocument()
    sel = doc.CurrentSelection
    data = sel.DataArray
    out = []
    for row in data:
        if any(row) and not row in out:
            out.append(row)
    sel.clearContents(1+2+4+8+16)
    sel[ :len(out) , : ].DataArray = out #LO>=5.1!!!
 

@struppi: wenn du den Zellbereich von 3 auf 13 Spalten erweiterst, musst du auch … dimArray(12) tun.

mikele
Beiträge: 771
Registriert: Sa 23. Jul 2011, 22:09

Re: Löschen von doppelten Zeilen per Makro

Beitrag von mikele » Mo 6. Mär 2017, 13:02

Hallo karolus,

cool!
Da kann ich weiter lernen. Schön, dass man unter Python sowas wie

Code: Alles auswählen

row in out
machen kann. Unter Basic vermutete ich, dass der Filter schneller als eine Schleifenlösung wäre.
Würdest du mir

Code: Alles auswählen

sel[ :len(out) , : ]
mal auseinandernehmen?
Gruß,
mikele

karolus
Beiträge: 651
Registriert: Di 23. Feb 2010, 12:07

Re: Löschen von doppelten Zeilen per Makro

Beitrag von karolus » Mo 6. Mär 2017, 14:31

Hallo
Würdest du mir

Code: Alles auswählen

sel[ :len(out) , : ] 
mal auseinandernehmen?
In python gibts den sogenannten "slice"-zugriff auf diverse Containerobjekte: (Listen, tuple, Text ), nehmen wir zur Illustration einen Text:

Code: Alles auswählen

text = "abcdefghijk"
print(text) # → 
'abcdefghijk'
print(text[:])#einfache Kopie → 
'abcdefghijk'
print(text[:5])#bis 5.Zeichen(bis ausschliesslich index 5) → 
'abcde'
print(text[5:])#ab ausschlisslich 5.Element bis Ende →
'fghijk'
print(text[::2])#jedes zweite ! → 
'acegik'
print(text[::-1])# Kopie rückwärts → 
'kjihgfedcba'
print(text[::-3])# rückwärts jedes dritte → 
'kheb'
print(text[-4:])# die 4 hinteren → 
'hijk' 
Dieser Zugriff wurde mit LO5.1 in der pyuno-schnittstelle auch für den 2dimensionalen Zugriff auf Zellbereiche implementiert, und zwar wie hier im Detail beschrieben

mikele
Beiträge: 771
Registriert: Sa 23. Jul 2011, 22:09

Re: Löschen von doppelten Zeilen per Makro

Beitrag von mikele » Mo 6. Mär 2017, 19:11

Hallo karolus,

danke - nette Sache!
Gruß,
mikele

Antworten