BITTE helfen Sie uns HEUTE mit einer SPENDE
Helfen Sie das OpenOffice Forum zu erhalten!
> 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
-
- Beiträge: 12
- Registriert: Fr 13. Jan 2017, 10:54
Löschen von doppelten Zeilen per Makro
Hi,
es gab in diesem Forum bereits Diskussionen über dieses Thema, allerdings ist kein Beitrag so richtig abgeschlossen bzw. die vorgeschlagenen Makros funktionieren nicht.
Es ist eigentlich ganz einfach zu erklären: ich brauche ein makro, das alle doppelten Zeilen löscht, allerdings nicht die leeren Zeilen, da das sonst viel zu lang dauert.
Vielen Dank im Voraus,
HerrStruppi
es gab in diesem Forum bereits Diskussionen über dieses Thema, allerdings ist kein Beitrag so richtig abgeschlossen bzw. die vorgeschlagenen Makros funktionieren nicht.
Es ist eigentlich ganz einfach zu erklären: ich brauche ein makro, das alle doppelten Zeilen löscht, allerdings nicht die leeren Zeilen, da das sonst viel zu lang dauert.
Vielen Dank im Voraus,
HerrStruppi
Re: Löschen von doppelten Zeilen per Makro
Hallo
Gehts hier um [1]writer oder [2]calc ?
Definiere "doppelt"
[2]du kennst →Daten→Filter→Standardfilter ?
Gehts hier um [1]writer oder [2]calc ?
Definiere "doppelt"
[2]du kennst →Daten→Filter→Standardfilter ?
-
- Beiträge: 12
- Registriert: Fr 13. Jan 2017, 10:54
Re: Löschen von doppelten Zeilen per Makro
Hi,
erstmal danke für die Hilfe. Hier ein Paar Antworten auf deine Fragen:
Bis bald,
HerrStruppi
erstmal danke für die Hilfe. Hier ein Paar Antworten auf deine Fragen:
Es geht um Calckarolus hat geschrieben:
Gehts hier um [1]writer oder [2]calc ?
Mit doppelt meine ich in dem Fall inhaltlich exakt identische Zeilen, leere Zeilen spielen dabei keine Rolle. Wenn diese auch entfernt werden, ist das allerdings auch nicht schlimm.karolus hat geschrieben:
Definiere "doppelt"
Ja, das kenne ich, das hilft mir aber für ein Makro nicht weiter. Ich habe bereits versucht, mithilfe dieser Funktion ein Makro aufzunehmen, die einzelnen Schritte des Filters werden allerdings nicht aufgezeichnet.karolus hat geschrieben:
[2]du kennst →Daten→Filter→Standardfilter ?
Bis bald,
HerrStruppi
Re: Löschen von doppelten Zeilen per Makro
Hallo,
für ein sinnvolles Makro wirst du mit dem Aufzeichnen keinen Erfolg haben.
Einen (Standard)Filter kannst du per Makro z. B. so realisieren:
Der Bereich in Tabelle 1 wird dann ohne Duplikate gefiltert und auf Tabelle 2 ausgegeben.
Ob das Ganze so sinnvoll ist, hängt allerdings davon ab, was du mit den Daten dann noch veranstalten willst. Dazu braucht es mehr Informationen.
für ein sinnvolles Makro wirst du mit dem Aufzeichnen keinen Erfolg haben.
Einen (Standard)Filter kannst du per Makro z. B. so realisieren:
Code: Alles auswählen
Sub Main
odoc=thiscomponent
quelle=odoc.sheets(0).getcellrangebyname("A1:C12")
ziel=odoc.sheets(1).getcellrangebyname("A1")
oFilter = quelle.createFilterDescriptor(True)
oFilter.ContainsHeader=true
oFilter.CopyOutputData=true
oFilter.OutputPosition=ziel.celladdress
oFilter.SkipDuplicates=true
aFilterFields = DimArray(2)
for i=0 to 2
aFilterFields(i) = new com.sun.star.sheet.TableFilterField
aFilterFields(i).Connection = com.sun.star.sheet.FilterConnection.AND
aFilterFields(i).field=i
aFilterFields(i).IsNumeric = true
aFilterFields(i).Operator = com.sun.star.sheet.FilterOperator.NOT_EMPTY
next
oFilter.setFilterFields(aFilterFields)
quelle.filter(oFilter)
End Sub
Ob das Ganze so sinnvoll ist, hängt allerdings davon ab, was du mit den Daten dann noch veranstalten willst. Dazu braucht es mehr Informationen.
- Dateianhänge
-
- makro_filter.ods
- (9.85 KiB) 253-mal heruntergeladen
Gruß,
mikele
mikele
-
- Beiträge: 12
- Registriert: Fr 13. Jan 2017, 10:54
Re: Löschen von doppelten Zeilen per Makro
Hallo,
erstmal danke für die Hilfe.
leider funktioniert das makro nicht es erscheint eine Fehlermeldung in Zeile 4 ("ziel=odoc.sheets(1).getcellrangebyname("A1")"): "Unzulässiger Wert oder Datentyp. Index außerhalb des definierten Bereichs." Bei dem Makro des Dokuments, das du mir zum Download gegeben hast, passiert beim Ausführen des Makros leider gar nichts.
um noch mal genauer zu erklären, was ich meinte hier ein Beispiel:
1) Inhalt 1----------Inhalt 2----------Inhalt 3----------Inhalt 4
2) Inhalt 5----------Inhalt 6----------Inhalt 7----------Inhalt 8
3) Inhalt 9----------Inhalt 10----------Inhalt 3----------Inhalt 5
4) Inhalt 1----------Inhalt 6----------Inhalt 5----------Inhalt 2
5) Inhalt 1----------Inhalt 1----------Inhalt 1----------Inhalt 1
6) Inhalt 5----------Inhalt 6----------Inhalt 7----------Inhalt 8
In diesem Beispiel sollte bei dem Makro, das ich suche, nur die 6) gelöscht werden, da sie identisch zur 2) ist. Die 2) sollte nicht gelöscht werden. Unter gelöscht verstehe ich nicht Inhalte löschen sondern komplette Zeile löschen. Ich will mit den Daten sonst nichts mehr machen, ich will nur, dass keine Zeile doppelt existiert. Es ist auch nicht nötig, dass die Tabelle neu ausgegeben wird oder so was, es reicht, wenn die überflüssigen zeilen gelöscht werden.
Ich hoffe das reicht an Information,
HerrStruppi
erstmal danke für die Hilfe.
leider funktioniert das makro nicht es erscheint eine Fehlermeldung in Zeile 4 ("ziel=odoc.sheets(1).getcellrangebyname("A1")"): "Unzulässiger Wert oder Datentyp. Index außerhalb des definierten Bereichs." Bei dem Makro des Dokuments, das du mir zum Download gegeben hast, passiert beim Ausführen des Makros leider gar nichts.
um noch mal genauer zu erklären, was ich meinte hier ein Beispiel:
1) Inhalt 1----------Inhalt 2----------Inhalt 3----------Inhalt 4
2) Inhalt 5----------Inhalt 6----------Inhalt 7----------Inhalt 8
3) Inhalt 9----------Inhalt 10----------Inhalt 3----------Inhalt 5
4) Inhalt 1----------Inhalt 6----------Inhalt 5----------Inhalt 2
5) Inhalt 1----------Inhalt 1----------Inhalt 1----------Inhalt 1
6) Inhalt 5----------Inhalt 6----------Inhalt 7----------Inhalt 8
In diesem Beispiel sollte bei dem Makro, das ich suche, nur die 6) gelöscht werden, da sie identisch zur 2) ist. Die 2) sollte nicht gelöscht werden. Unter gelöscht verstehe ich nicht Inhalte löschen sondern komplette Zeile löschen. Ich will mit den Daten sonst nichts mehr machen, ich will nur, dass keine Zeile doppelt existiert. Es ist auch nicht nötig, dass die Tabelle neu ausgegeben wird oder so was, es reicht, wenn die überflüssigen zeilen gelöscht werden.
Ich hoffe das reicht an Information,
HerrStruppi
Re: Löschen von doppelten Zeilen per Makro
Hallo,
Die erste Zeile wird dabei als Überschrift interpretiert.
Das ist klar, wenn du mein Beispiel unverändert auf deine Datei anwendest (die offensichtlich kein zweites Tabellenblatt besitzt).es erscheint eine Fehlermeldung
Das ist schon klar. Filtern wird hier wahrscheinlich trotzdem der schnellste Weg sein. Anbei ein geändertes Beispiel. Die Daten im Bereich A1:C20 zunächst filtert (in diesem Fall Duplikate ausblendet) und anschließend die ausgeblendeten Zeilen löscht.es reicht, wenn die überflüssigen zeilen gelöscht werden
Die erste Zeile wird dabei als Überschrift interpretiert.
Code: Alles auswählen
Sub Main
odoc=thiscomponent
quelle=odoc.sheets(0).getcellrangebyname("A1:C20")
oFilter = quelle.createFilterDescriptor(True)
oFilter.ContainsHeader=true
oFilter.CopyOutputData=false
oFilter.SkipDuplicates=true
aFilterFields = DimArray(2)
for i=0 to quelle.rangeaddress.endcolumn-quelle.rangeaddress.startcolumn
aFilterFields(i) = new com.sun.star.sheet.TableFilterField
aFilterFields(i).Connection = com.sun.star.sheet.FilterConnection.AND
aFilterFields(i).field=i
aFilterFields(i).IsNumeric = true
aFilterFields(i).Operator = com.sun.star.sheet.FilterOperator.NOT_EMPTY
next
oFilter.setFilterFields(aFilterFields)
quelle.filter(oFilter)
for i=quelle.rangeaddress.endrow to quelle.rangeaddress.startrow step -1
if odoc.sheets(0).rows(i).isfiltered then odoc.sheets(0).getrows.removebyindex(i,1)
next
End Sub
- Dateianhänge
-
- makro_filter2.ods
- (10.68 KiB) 248-mal heruntergeladen
Gruß,
mikele
mikele
-
- Beiträge: 12
- Registriert: Fr 13. Jan 2017, 10:54
Re: Löschen von doppelten Zeilen per Makro
Hi,
entschuldigung für die späte Rückmeldung (ich war im Urlaub) und danke für die Hilfe.
Vielleicht stelle ich mich auch einfach dumm an, aber was muss ich denn an dem Makro verändern, damit das funktioniert??
Ich schicke anbei nochmal ein Screenshot der Fehlermeldung. Bis später,
HerrStruppi
entschuldigung für die späte Rückmeldung (ich war im Urlaub) und danke für die Hilfe.
Vielleicht stelle ich mich auch einfach dumm an, aber was muss ich denn an dem Makro verändern, damit das funktioniert??
Was meinst du damit? Ich habe einfach kein Unterschied zwischen dem Dokument, das du zum Download anbietest und dem, das ich benutze gefunden (Mal abgesehen vom Ihhalt der Zellen). Und dennoch erscheint die selbe Fehlermeldung, die ich bereits erwähnt hatte. Bei dem Dokument zum Download gibt es doch auch kein zweites Tabellenblatt, oder?mikele hat geschrieben:Das ist klar, wenn du mein Beispiel unverändert auf deine Datei anwendest (die offensichtlich kein zweites Tabellenblatt besitzt).
Ich schicke anbei nochmal ein Screenshot der Fehlermeldung. Bis später,
HerrStruppi
-
- Beiträge: 12
- Registriert: Fr 13. Jan 2017, 10:54
Re: Löschen von doppelten Zeilen per Makro
Ok, jetzt muss ich mich doch noch mal melden. Ich habe doch etwas im Makro verändert, nur hatte ich das vergessen. Ich habe den Bereich, in dem gesucht wird auf "A1:M100" erweitert. Das scheint der Fehler zu sein. Wie muss ich das Makro verändern, damit das funktioniert?
Ebenfalls ist mir noch aufgefallen, dass die Fehlermeldung nicht erscheint, wenn ich das Makro nicht unter "Meine Makros" sondern im Dokument selbst speichere. Funktionieren tut das Makro dennoch nicht, sowohl mit "A1:C20" als auch mit "A1:M100". Es passiert überhaupt nichts, nur ohne Fehlermeldung.
Ebenfalls ist mir noch aufgefallen, dass die Fehlermeldung nicht erscheint, wenn ich das Makro nicht unter "Meine Makros" sondern im Dokument selbst speichere. Funktionieren tut das Makro dennoch nicht, sowohl mit "A1:C20" als auch mit "A1:M100". Es passiert überhaupt nichts, nur ohne Fehlermeldung.
Re: Löschen von doppelten Zeilen per Makro
Hallo,
mein Fehler - ich hatte zum Schluss noch etwas geändert und das aber nicht konsequent.
Hier das bereinigte Makro:
mein Fehler - ich hatte zum Schluss noch etwas geändert und das aber nicht konsequent.
Hier das bereinigte Makro:
Code: Alles auswählen
Sub Main
odoc=thiscomponent
quelle=odoc.sheets(0).getcellrangebyname("A1:M100")
oFilter = quelle.createFilterDescriptor(True)
oFilter.ContainsHeader=true
oFilter.CopyOutputData=false
oFilter.SkipDuplicates=true
n=quelle.rangeaddress.endcolumn-quelle.rangeaddress.startcolumn
aFilterFields = DimArray(n)
for i=0 to quelle.rangeaddress.endcolumn-quelle.rangeaddress.startcolumn
aFilterFields(i) = new com.sun.star.sheet.TableFilterField
aFilterFields(i).Connection = com.sun.star.sheet.FilterConnection.AND
aFilterFields(i).field=i
aFilterFields(i).IsNumeric = true
aFilterFields(i).Operator = com.sun.star.sheet.FilterOperator.NOT_EMPTY
next
oFilter.setFilterFields(aFilterFields)
quelle.filter(oFilter)
for i=quelle.rangeaddress.endrow to quelle.rangeaddress.startrow step -1
if odoc.sheets(0).rows(i).isfiltered then odoc.sheets(0).getrows.removebyindex(i,1)
next
End Sub
Gruß,
mikele
mikele
-
- Beiträge: 12
- Registriert: Fr 13. Jan 2017, 10:54
Re: Löschen von doppelten Zeilen per Makro
Hi,
vielen Dank für das Makro und die dafür aufgewendete Zeit, jetzt funktioniert es
MfG,
HerrStruppi
vielen Dank für das Makro und die dafür aufgewendete Zeit, jetzt funktioniert es
MfG,
HerrStruppi