Calc: Duplikate in Zellen entfernen

Programmierung unter AOO/LO (StarBasic, Python, Java, ...)

Moderator: Moderatoren

retuwe61
****
Beiträge: 159
Registriert: So, 18.11.2007 21:25

Calc: Duplikate in Zellen entfernen

Beitrag von retuwe61 »

Hallo miteinander.
Trotz intensiver Suche konnte ich im Forum keine Lösung finden. Deshalb möchte ich folgende Frage stellen:
In einer Tabelle befinden sich Zellen, die doppelte Strings beinhalten. Z. B. Zelle B2: " Müller // Meier // Schulze // Meier ".
Ist es mit einen Makro möglich, den doppelten Eintrag (in diesem Fall "Meier") zu entfernen? Oder hat sogar jemand ein Makro dafür?
Gruß
Uwe
Zuletzt geändert von retuwe61 am Mo, 06.11.2017 22:41, insgesamt 2-mal geändert.
Angewandt wird LibeOffice Version 5.1.6.2
Benutzeravatar
lorbass
********
Beiträge: 4116
Registriert: Mo, 01.05.2006 21:29
Wohnort: Bonn

Re: Calc: Duplikate in Zellen entfernen

Beitrag von lorbass »

retuwe61 hat geschrieben: Sa, 04.11.2017 23:51 Ist es mit einen Makro möglich, den doppelten Eintrag (in diesem Fall "Meier") zu entfernen?
Ja, ist es. Eventuell sogar mit Hausmitteln, also ohne Makro. Hängt von der Konkretisierung deines Wunsches ab.

Sag uns bitte noch, ob es sich um eine Writer- oder eine Calc-Tabelle handelt. Wichtig ist auch noch, ob du nur „Meier“ loswerden – also den Zellinhalt löschen – willst, oder die komplette Tabellenzeile, in der „Meier“ steht.

Für Calc-Tabellen und das Entfernen der ganzen Zeile such hier im Forum in der Rubrik Calc nach »Duplikate löschen« und/oder »doppelte Einträge«. Damit findest du zig Lösungen.

Je nach dem wie der Verarbeitungsprozess aussieht und wie groß die Tabelle ist, kommt für die Bereinigung einer Writer-Tabelle eventuell eine Kopie in Calc in Frage, die nach der Verarbeitung wieder ins Writer-Dokument zurück kopiert wird. Denkbar auch, die bereinigte Calc-Tabelle also solche ins Writer-Dokument zu integrieren.

Gruß
lorbass
retuwe61
****
Beiträge: 159
Registriert: So, 18.11.2007 21:25

Re: Calc: Duplikate in Zellen entfernen

Beitrag von retuwe61 »

Hallo lorbass.
Steht im Betreff, dass es sich um Zellen in Calc handelt.
Und nein, ich möchte weder die komplette Zeile noch den kompletten Zelleninhalt löschen. Einzig der doppelte Teilstring in der Zelle soll entfernt werden. Im o.g Beispiel soll in Zelle B2 also "Müller // Meier // Schulze //" oder besser "Müller // Meier // Schulze" verbleiben.

Hintergrund ist, dass ich Duplikatzeilen schon vorher automatisch entfernt und die Zelleninhalte der duplikatverursachenden Spalte in einer einzigen Zelle (hier B2) zusammengeführt habe.
Gruß
Uwe
Angewandt wird LibeOffice Version 5.1.6.2
mikeleb
*******
Beiträge: 1315
Registriert: Fr, 09.12.2011 16:50

Re: Calc: Duplikate in Zellen entfernen

Beitrag von mikeleb »

Hallo,
die Zelleninhalte der duplikatverursachenden Spalte in einer einzigen Zelle (hier B2) zusammengeführt habe
Vielleicht wäre es einfacher, die Duplikate vor oder während des Zusammenführens zu entfernen. Wie müssen wir uns den Tabellenaufbau vorstellen, der zu den Duplikaten führt?
Gruß,
mikeleb
retuwe61
****
Beiträge: 159
Registriert: So, 18.11.2007 21:25

Re: Calc: Duplikate in Zellen entfernen

Beitrag von retuwe61 »

Guten Morgen.
Anbei eine kleine Beispieltabelle.
Mittels Makro werden die Formeln in Spalten C und D gegen die Echtwerte ausgetauscht und dann alle Zeilen entfernt, bis auf diejenigen, die in der Hilfspalte mit "0" gekennzeichnet sind (später werden die " // " durch Umbrüche ersetzt).
So verbleiben in diesem Fall die Zeilen 5 und 9, die als Duplikat den Müller (C5) und den Lühmann (C9) enthalten.
Gruß
Uwe
Dateianhänge
Beispiel.ods
(11.81 KiB) 149-mal heruntergeladen
Angewandt wird LibeOffice Version 5.1.6.2
mikeleb
*******
Beiträge: 1315
Registriert: Fr, 09.12.2011 16:50

Re: Calc: Duplikate in Zellen entfernen

Beitrag von mikeleb »

Hallo,
momentan verknüpfst du also alle Namen der Spalte B, deren Spalte A denselben Wert haben, per Formel Schritt für Schritt zu einer Namensliste. Hinzu kommt eine Hilfsspalte, die dir anzeigt (1), welche Zeilen gelöscht werden können.
Dann werden die Formeln in Spalte C und D durch ihre Werte ersetzt und alle Zeilen mit dem Hilfsspaltenwert 1 gelöscht. Per Makro oder per Hand?
Im Ergebnis hast du dann eine Zeile mit Nr, Name, Namensliste und Hilfswert 0.
Danach werden die " // " durch Umbrüche (welcher Art?) ersetzt (manuell?, Makro?, suchen&ersetzen?) und ich vermute mal, die Spalte B gelöscht.
Aus meiner Sicht wäre es effektiver, das alles in ein einziges Makro zu stecken.
Wie sehen deine bisherigen Makros aus? Dann ließen sich die restlichen Funktionen mit einbauen.
Gruß,
mikeleb
retuwe61
****
Beiträge: 159
Registriert: So, 18.11.2007 21:25

Re: Calc: Duplikate in Zellen entfernen

Beitrag von retuwe61 »

Wie du es beschrieben hast, gehe ich vor. Alles per Makro.

mikeleb, vorhin habe ich DEINE Lösung in diesem Threat viewtopic.php?f=2&t=65377
gefunden. Kann ich das für mich weiterverwenden?
Gruß
Uwe
Angewandt wird LibeOffice Version 5.1.6.2
mikeleb
*******
Beiträge: 1315
Registriert: Fr, 09.12.2011 16:50

Re: Calc: Duplikate in Zellen entfernen

Beitrag von mikeleb »

Hallo,
natürlich darfst du es verwenden (dazu ist es ja da :) ).
Anbei eine Idee, wie du dein Ziel erreichen könntest.
Dateianhänge
Beispiel (1).ods
(15.91 KiB) 167-mal heruntergeladen
Gruß,
mikeleb
retuwe61
****
Beiträge: 159
Registriert: So, 18.11.2007 21:25

Re: Calc: Duplikate in Zellen entfernen

Beitrag von retuwe61 »

Klasse. Das wird mir weiterhelfen.
Herzlichen Dank!
Gruß
Uwe
Angewandt wird LibeOffice Version 5.1.6.2
retuwe61
****
Beiträge: 159
Registriert: So, 18.11.2007 21:25

Re: Calc: Duplikate in Zellen entfernen

Beitrag von retuwe61 »

Hallo mikeleb.
Eine Frage hätte ich noch:
Wie muss der Code abgeändert werden, wenn Spalte C noch die Vornamen enthalten würde und die dann in Spalte H in derselben Art ohne Duplikate abgebildet werden sollen?
Ich bin gespannt.
Gruß
Uwe
Angewandt wird LibeOffice Version 5.1.6.2
mikeleb
*******
Beiträge: 1315
Registriert: Fr, 09.12.2011 16:50

Re: Calc: Duplikate in Zellen entfernen

Beitrag von mikeleb »

Hallo,
wenn Spalte C noch die Vornamen enthalten würde und die dann in Spalte H in derselben Art ohne Duplikate abgebildet werden sollen
Unabhängig von den Nachnamen?
Kannst du noch ein bisschen mehr verraten, damit der Sinn der Übung klarer wird?
Gruß,
mikeleb
mikeleb
*******
Beiträge: 1315
Registriert: Fr, 09.12.2011 16:50

Re: Calc: Duplikate in Zellen entfernen

Beitrag von mikeleb »

Hallo,
das es mich mal wieder gereizt hat, hier die (ursprüngliche) Lösung in Python, wodurch u. a. nun das Sortieren der Namen erheblich einfacher wird:

Code: Alles auswählen

def spalte_verbinden():
    oDoc = XSCRIPTCONTEXT.getDocument()
    oSheet = oDoc.Sheets.getByIndex(0)
    oCells = oSheet.getCellRangeByName('A2:B10')
    x=set(oCells.getDataArray())
    #als Menge werden Duplikate entfernt
    trenner=' // '    
    nur_nr=set()
    fertig=[]
    #Erfassen aller Nummern
    for nr,name in x:
        nur_nr.add(nr)
    #Finden und Sortieren aller Namen zu jeder Nummer
    for nr1 in nur_nr:
        namen=[]
        for nr,name in x:
            if nr==nr1:
                namen.append(name)
        namen=sorted(namen)
        fertig.append([nr1,' // '.join(namen)])
    #Schreiben der neuen Daten in Spalte F und G 
    n=len(fertig)
    oSheet.getCellRangeByPosition(5,1,6,n).setDataArray(tuple(fertig))
Die Python-Profis dürfen mir gern Vorschläge zur Optimierung machen ...
Gruß,
mikeleb
retuwe61
****
Beiträge: 159
Registriert: So, 18.11.2007 21:25

Re: Calc: Duplikate in Zellen entfernen

Beitrag von retuwe61 »

Hallo mikeleb.
Hintergrund ist, dass ich wiederkehrend Inhalte aus csv-Dateien in ein Tool importiere, die sich in der Spaltenstruktur und im Umfang unterscheiden, jedoch mindestens irgendwo eine duplikatverursachende Spalte beinhalten. Mit einer Vielzahl von Subs und deiner Lösung aus dem o. g. Threat sowie zwei Hilfstabellen und mehreren Hilfsspalten bin ich letztendlich zum Ziel gelangt. Dein Lösungsansatz hat mich natürlich neugierig gemacht und es stellt sich für mich die Frage, ob sich das nicht nur auf eine duplikatverursachende Spalte sondern für den gesamten Tabellenbereich anwenden ließe.

Wie gesagt hat sich mein Problem gelöst, wobei ich erahne, dass es auf Basis deiner Ideen sicherlich komfortabler zu lösen wäre.
Herzlichen Dank!
Gruß
Uwe
Angewandt wird LibeOffice Version 5.1.6.2
Antworten