einen Standard Filter erstellen

    From The Document Foundation Wiki
    < Macros‎ | Calc
    This page is a translated version of the page Macros/Calc/ba026 and the translation is 97% complete.


    Other languages:

    Zusammenfassung

    Diese Seite zeigt ein LibreOffice Basic Makro, das einen einfachen Standardfilter erzeugt. Es ist ein Beispiel aus Kapitel 13 ("Calc als Datenbank") aus dem Handbuch zu Calc 7.0.

    Beschreibung

    In einem Makro wird die Filterung eines Datenbereiches mit der Methode filter() entweder auf den Bereich oder auf das Tabellenblatt mit dem Bereich ausgeführt. Wie die Sortierbeschreibung enthält eine Filterbeschreibung die Filtereinstellungen für das aktuelle Tabellenblatt. So wie z. Bsp. ob die erste Zeile oder die erste Spalte die Titel enthält, die nicht mitgefiltert werden sollen. Eine Filterbeschreibung kann mit der Methode createFilterDescriptor() auf einem Tabellenblatt oder einem Zellbereich erstellt werden.

    createFilterDescriptor(leer)
    Erzeugt eine Filterbeschreibung. Falls der boolsche Schalter Empty auf TRUE gesetzt wird, dann wird eine leere Filterbeschreibung erzeugt. Falls Empty auf FALSE gesetzt ist, dann wird die Beschreibung mit den obigen Einstellungen des aktuellen Objektes (wie z. Bsp. den Datenbankbereich) gefüllt.

    Genauso wie die Sortierbeschreibung können Filterbeschreibungen mit dieser Methode erzeugt werden. Diese werden modifiziert und als Argument an die Filtermethode übergeben. Das folgende Makro zeigt dieses Vorgehen durch Erstellen eines einfachen Standardfilters für das erste Tabellenblatt in einem Dokument.

    Note pin.svg

    Anmerkung:
    Wenn die filter-Methode auf ein Tabellenblatt angewendet wird, wird jede leere Zeile ausgeblendet. Wenn filter auf einen Bereich angewendet wird, werden nur leere Zeilen in dem Bereich selbst ausgeblendet.

    Code

    Sub SimpleSheetFilter()
      Dim oSheet       ' Tabellenblatt zur Aufnahme des Filters
      Dim oFilterDesc  ' Filterbeschreibung
      Dim oFields(0) As New com.sun.star.sheet.TableFilterField
      
      oSheet = ThisComponent.getSheets().getByIndex(0)
      
      REM bei TRUE wird eine leere Filterbeschreibung
      REM erzwugt. Bei False wird eine 
      REM Beschreibung mit den genannten Einstellungen erzeugt.
      oFilterDesc = oSheet.createFilterDescriptor(True)
      
      With oFields(0)
        REM Die Verbindungsdaten können anzeigen,
        REM wie das obige Feld angesprochen werden kann. Dieses ist
        REM das erste Feld, daher ist es nicht unbedingt erforderlich.
        '.Connection = com.sun.star.sheet.FilterConnection.AND
        '.Connection = com.sun.star.sheet.FilterConnection.OR
    
        REM Die Feldangabe ist die zu filternde
        REM Null-basierte Spaltennummer. Falls eine Zelle angegeben
        REM werden soll, kann das über .Field = oCell.CellAddress.Column passieren.
        .Field = 5	' Das Quiz #2 Noten-Feld
    
        REM Vergleich auf eine Zahl oder einen Text?
        .IsNumeric = True
    
        REM Die NumericValue Eigenschaft wird verwendet 
        REM <span lang="en" dir="ltr" class="mw-content-ltr">because .IsNumeric = True from above.</span>
        .NumericValue = 80
    
        REM Wenn IsNumeric = FALSE, dann wird die 
        REM StringValue Eigenschaft verwendet.
        REM .StringValue = " was auch immer"
    
        REM gültige Operatoren sind EMPTY, NOT_EMPTY, EQUAL,
        REM NOT_EQUAL, GREATER, GREATER_EQUAL, LESS,
        REM LESS_EQUAL, TOP_VALUES, TOP_PERCENT,
        REM BOTTOM_VALUES und BOTTOM_PERCENT
        .Operator = com.sun.star.sheet.FilterOperator.GREATER_EQUAL
      End With
      
      REM Die Filterbeschreibung unterstützt die folgenden
      REM Eigenschaften: IsCaseSensitive, SkipDuplicates,
      REM UseRegularExpressions, 
      REM SaveOutputPosition, Orientation, ContainsHeader, 
      REM CopyOutputData, OutputPosition und MaxFieldCount.
      oFilterDesc.setFilterFields(oFields())
      oFilterDesc.ContainsHeader = True
      oSheet.filter(oFilterDesc)
    End Sub

    Dieses Calc Tabellenblatt enthält den obigen LibreOffice Basic Code.