mehrere Spalten filtern und reguläre Ausdrücke verwenden

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


    Other languages:

    Zusammenfassung

    Diese Seite zeigt ein LibreOffice Basic Makro, das nach zwei Spalten filtert und reguläre Ausdrücke verwendet. Es ist ein Beispiel aus Kapitel 13 ("Calc als Datenbank") aus dem Handbuch zu Calc 7.0.

    Beschreibung

    Das folgende Makro zeigt einen Filter, der nach zwei Spalten filtert und reguläre Ausdrücke zeigt. Die Methode filter wird in diesem Beispiel auf einen Bereich und nicht auf das ganze Tabellenblatt angewendet.

    Als Beispiel filtert das Makro ein Notenblatt in den Zellen $Tabelle1.A1:H1 nach Ergebnissen aus Test #1 <= 90 % und Schülernamen, die mit "B" beginnen. Die verlinkte Tabelle enthält ein solches Notenblatt.

    Code

    Sub SimpleRangeFilter()
      Dim oSheet          ' zu filterndes Tabellenblatt
      Dim oRange          ' zu filternder Bereich
      Dim oFilterDesc     ' Filterbeschreibung
      Dim oFields(1) As New com.sun.star.sheet.TableFilterField
      
      oSheet = ThisComponent.getSheets().getByIndex(0)
      oRange = oSheet.getCellRangeByName("A1:H11")
      
      REM Wenn das Argument TRUE ist, wird eine 
      REM leere Filterbeschreibung erzeugt.
      oFilterDesc = oRange.createFilterDescriptor(True)
    
      REM Ein Feld einrichten, um Zellen mit Inhalt anzuzeigen, die 
      REM mit dem Buchstaben B beginnen.
      With oFields(0)   
        .Field = 0              ' Spalte A (Schülernamen) filtern.
        .IsNumeric = False      ' Es wird ein Text verwendet, keine Zahl.
        .StringValue = "b.*"    ' Jeder Name, der mit B beginnt.
        .Operator = com.sun.star.sheet.FilterOperator.EQUAL
      End With
      REM Ein Feld einrichten, das mindestens einen der obigen Bedingungen erfüllt.
      REM Diese neue Bedingung erfordert einen Wert kleiner 
      REM oder gleich 90.
      With oFields(1)
        .Connection = com.sun.star.sheet.FilterConnection.OR
        .Field = 6              ' Spalte G (Noten aus Test #1) filtern.
        .IsNumeric = True       ' Es werden Zahlen kleiner
        .NumericValue = 90      ' als 90 verwendet.
        .Operator = com.sun.star.sheet.FilterOperator.LESS_EQUAL
      End With
    
      oFilterDesc.setFilterFields(oFields())
      oFilterDesc.ContainsHeader = True
      oFilterDesc.UseRegularExpressions = True
      oRange.filter(oFilterDesc)
    End Sub

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