Jump to content

mehrere Spalten filtern und reguläre Ausdrücke verwenden

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


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.