Zeilen des Filterresultats löschen

Antwort erstellen


BBCode ist eingeschaltet
[img] ist ausgeschaltet
[url] ist eingeschaltet
Smileys sind ausgeschaltet

Die letzten Beiträge des Themas
   

Ansicht erweitern Die letzten Beiträge des Themas: Zeilen des Filterresultats löschen

Re: Zeilen des Filterresultats löschen

von Clousi » Do, 26.08.2021 21:27

Das hat super geklappt! Vielen Dank!

Re: Zeilen des Filterresultats löschen

von Stephan » Mi, 25.08.2021 08:11

dann schaue Dir Kapitel 9 in http://www.calc-info.de/files/Calc_StarBasic.pdf an.

Wenn Du dort .findAll benutzt hast Du ein Ergebnis das alle Fundstellen beinhaltet und das Du dann mit .Select sichtbar markieren und per dispatcher-Cede direkt löschen kannst, was sehr schnell geht auch bei einem umfangreiche ERgebnis.

Hier ist ein Stück ergänzter Code, aus dem obigen PDF, den Du noch auf DEine Suche anpassen musst, weil Du nach einem regulären Ausdruck suchst.

Code: Alles auswählen

Sub textInZellebereichSuchen
Dim oZelleOderBereichOderBlatt as Object
Dim oSuchBeschreibung as Object
Dim oTrefferZelle as Object
' Zellbereich holen in dem ersetzt werden soll
oZelleOderBereichOderBlatt = ThisComponent.Sheets(0).getCellRangeByName("A1:D40")
' SearchDescriptor erzeugen
        oSuchBeschreibung = oZelleOderBereichOderBlatt._
                createSearchDescriptor()
                
        ' SearchDescriptor konfigurieren
        With oSuchBeschreibung
                .SearchString = "Hallo"
                .SearchBackwards = False
                .SearchCaseSensitive = True
                .SearchWords = True
                .SearchRegularExpression = False
                .SearchStyles = False
                .SearchSimilarity = False
                .SearchSimilarityRelax = True
                .SearchSimilarityRemove = 2
                .SearchSimilarityAdd = 2
                .SearchSimilarityExchange = 2
        End With
        
        ergebnis = oZelleOderBereichOderBlatt.findAll( oSuchBeschreibung )
 
ThisComponent.getCurrentController.Select(ergebnis)

document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
dispatcher.executeDispatch(document, ".uno:DeleteRows", "", 0, Array())


End Sub

Gruß
Stephan

Re: Zeilen des Filterresultats löschen

von Clousi » Di, 24.08.2021 20:23

Hallo Stefan

vielen Dank für Deine Antwort!
Nein, der Filter wird nicht anderweitig gebraucht. Ich habe diesen Filter-Code gefunden und dachte mir, das sei ein gangbarer weg. Wenn es per Suche eine elegantere Lösung gibt, dann ist das natürlich super.

Das eigentliche Ziel ist es per Makro alle Zeilen zu löschen, deren Wert in Spalte H <2000 ist.

Das Ganze soll per Makro gelöst werden, weil die Datensätze kontinuierlich erneuert werden.

Wie gesagt: für jeglichen Input bin ich sehr dankbar!
Beste Grüsse
Clousi

Re: Zeilen des Filterresultats löschen

von Stephan » Di, 24.08.2021 08:52

Muss es denn ein Filter sein bzw. welchen Grund gibt es einen Filter einzusetzen und dann das Filterergebnis löschen zu wollen?

Um die gefilterten Zeilen löschen zu können, fürchte ich müsste man alle Zeilen des Bereichs nochmals per Makro prüfen und das ist langsam wenn der Bereich groß ist. (Vielleicht hat jemand anderes einen besseren Ansatz, aber mir fällt direkt nichts Besseres ein)

Das Ganze per Suche zu machen schiene mir günstiger, WENN der Filter nicht anderweitig gebraucht wird.


Gruß
Stephan

Zeilen des Filterresultats löschen

von Clousi » Mo, 23.08.2021 18:44

Hallo zusammen

Ich möchte gerne per Basic Makro einen Datenbereich filtern und die resultierenden Zeilen löschen.
Dafür habe ich mir folgendes Makro gesucht, kopiert und an meine Bedürfnisse angepasst:

Code: Alles auswählen

Sub applyMyCustomFilter
Const colID = 7 '< column #6 of the used range
Const sRegex = "1(\d\d\d)|(\d\d\d)" '< this is one regex including the ORs as |
cEQ = com.sun.star.sheet.FilterOperator.EQUAL' <some_column> EQUALs <some_regex>

Dim fld as new com.sun.star.sheet.TableFilterField
fld.Field = colID
fld.Operator = cEQ
fld.StringValue = sRegex

sh = ThisComponent.CurrentController.getActiveSheet()
rg = getUsedRange(sh)
fd = rg.createFilterDescriptor(True)

fd.ContainsHeader = True
fd.UseRegularExpressions = True
fd.IsCaseSensitive = False
fd.SkipDuplicates = False
fd.CopyOutputData = False

fd.setFilterFields(Array(fld))
rg.filter(fd)

End Sub
Nun die Frage an die Profis:
Wie muss ich diesen Code ergänzen um die Zeilen des Filterresultats (und nur diese) zu löschen?

Ich habe erst eben begonnen mich mit der Basic-Sprache auseinanderzusetzen und bin echt angewiesen auf Unterstützung. Deshalb wäre ich um jeden Input froh!

Vielen Dank schon im Voraus
Beste Grüsse
Clousi

Nach oben