einen Standard Filter erstellen
TDF LibreOffice Document Liberation Project Community Blogs Weblate Nextcloud Redmine Ask LibreOffice Spende
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.
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.