Jump to content

einen Standard Filter erstellen

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


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.

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 erzeugt. 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 weil .IsNumeric = TRUE von oben.
    .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.