Filter

Mit Filtern können Sie die Daten in einer Tabelle sortieren und filtern. Durch Filter werden die Datenwerte in Ihrer Tabelle nicht geändert. Sie können Filter verwenden, um Informationen vorübergehend auszublenden oder zu sortieren. Daten, die den angegebenen Filterkriterien entsprechen, werden nicht angezeigt, solange der Filter aktiviert ist. Mit Filteransichten können Sie außerdem verschiedene benannte Filter speichern und jederzeit zwischen ihnen wechseln.

Im Folgenden finden Sie einige beispielhafte Anwendungsfälle für Filter:

  • Daten nach einer bestimmten Spalte sortieren. Sortieren Sie beispielsweise Nutzerdatensätze nach Nachnamen.
  • Daten ausblenden, die eine bestimmte Bedingung erfüllen. Blenden Sie zum Beispiel alle Datensätze aus, die älter als 2 Jahre sind.
  • Daten ausblenden, die einem bestimmten Wert entsprechen. Blenden Sie beispielsweise alle Probleme mit dem Status „geschlossen“ aus.

Einfacher Filter

Der BasicFilter für eine Tabelle ist der Standardfilter, der angewendet wird, wenn jemand die Tabelle aufruft. Eine Tabelle kann pro Tabellenblatt einen einfachen Filter haben. Sie können den einfachen Filter deaktivieren, indem Sie ihn löschen. Dadurch werden der Filter und alle zugehörigen Einstellungen aus der Tabelle entfernt. Wenn Sie denselben Filter wieder aktivieren möchten, müssen Sie die Kriterien noch einmal festlegen.

Einfachen Filter verwalten

Verwenden Sie zum Festlegen oder Löschen des einfachen Filters die Methode spreadsheets.batchUpdate mit dem entsprechenden Anfragetyp:

Verwenden Sie zum Auflisten des einfachen Filters die Methode spreadsheets.get und setzen Sie den URL-Parameter fields auf sheets/basicFilter. Das folgende Codebeispiel für spreadsheets.get zeigt eine Google Tabellen-URL mit einer Feldmaske:

GET https://sheets.googleapis.com/v4/spreadsheets/SPREADSHEET_ID?fields=sheets/basicFilter)

Filteransichten

Ein FilterView ist ein benannter Filter, den Sie jederzeit aktivieren und deaktivieren können. Eine Tabelle kann mehrere Filteransichten haben, aber es kann jeweils nur eine angewendet werden.

Im Folgenden finden Sie einige Anwendungsbeispiele für Filteransichten:

  • Sie haben mehrere Filter, zwischen denen Sie beim Anzeigen der Daten wechseln können.
  • Sie haben keinen Bearbeitungszugriff auf eine Tabelle, möchten aber einen Filter anwenden. In diesem Fall können Sie eine temporäre Filteransicht erstellen, die nur für Sie sichtbar ist.
  • Sie möchten, dass jede Person, mit der Sie Ihre Tabelle teilen, die Daten unterschiedlich sieht. Sie können die Filteransicht angeben, die Sie anwenden möchten, indem Sie spreadsheetId und filterViewId in der Tabellen-URL angeben. Verwenden Sie dazu das filterViewId, das beim Erstellen der Filteransicht in der Antwort zurückgegeben wird.

    Das folgende Codebeispiel zeigt eine Google Tabellen-URL mit einer Filteransicht:

    https://docs.google.com/spreadsheets/d/SPREADSHEET_ID/edit#gid=0&fvid=FILTER_VIEW_ID

Filteransichten verwalten

Verwenden Sie zum Erstellen, Duplizieren, Ändern oder Löschen von Filteransichten die Methode spreadsheets.batchUpdate mit dem entsprechenden Anfragetyp:

Verwenden Sie zum Auflisten aller Filteransichten die Methode spreadsheets.get und setzen Sie den URL-Parameter fields auf sheets/filterViews. Das folgende Codebeispiel für spreadsheets.get zeigt eine Google Tabellen-URL mit einer Feldmaske:

GET https://sheets.googleapis.com/v4/spreadsheets/SPREADSHEET_ID?fields=sheets/filterViews)

Filterdarstellung

Das folgende Codebeispiel zeigt die JSON-Darstellung für ein FilterView-Objekt. Das Objekt BasicFilter ist identisch, mit der Ausnahme, dass die Felder filterViewId und title fehlen und kein benannter Bereich verwendet werden kann.

{
  "filterViewId": number,
  "title": string,
  "range": {
    object(GridRange)
  },
  "namedRangeId": string,
  "sortSpecs": [
    {
      object(SortSpec)
    }
  ],
  "criteria": {
    string: {
      object(FilterCriteria)
    },
    ...
  }
}

Beispieldaten

Der Rest dieses Dokuments bezieht sich auf die folgende Tabelle mit Verkaufsdaten:

Tabelle 1 Beispiel für Verkaufsdaten
A B C D E F G
1 Artikelkategorie Modellnummer Kosten Menge Region Vertriebsmitarbeiter Versanddatum
2 Wheel Riesenrad W-24 20,50 $ 4 West Beth 01.03.2016
3 Tür D-01X 15,00 $ 2 Süd Amir 15.03.2016
4 Frame FR-0B1 34 $ 8 Ost Hanna 12.03.2016
5 Feld P-034 6,00 $ 4 Norden Devyn 15.03.2016
6 Feld P-052 11,50 $ 7 Ost Erik 16.05.2016
7 Wheel Riesenrad W-24 20,50 $ 11 Süd Sheldon 30.04.2016
8 Engine ENG-0161 330,00 $ 2 Norden Sandra 02.07.2016

Sortierspezifikationen

Ein Filter kann mehrere Sortierspezifikationen haben. Diese Spezifikationen bestimmen, wie die Daten sortiert werden, und werden in der angegebenen Reihenfolge angewendet. Das Attribut SortSpec.dimensionIndex gibt den Spaltenindex an, auf den die Sortierung angewendet werden soll.

Das folgende Codebeispiel zeigt eine Sortierungsspezifikation:

[
  {
    "dimensionIndex": 3,
    "sortOrder": "ASCENDING"
  },
  {
    "dimensionIndex": 6,
    "sortOrder": "ASCENDING"
  }
]

Bei Anwendung auf die Beispielverkaufsdaten sortiert diese Spezifikation zuerst nach „Menge“ und dann, wenn zwei Zeilen die gleiche Menge haben, nach „Versanddatum“.

Tabelle 2 Verkaufsdaten nach 2 Spalten sortiert
A B C D E F G
1 Artikelkategorie Modellnummer Kosten Menge Region Vertriebsmitarbeiter Versanddatum
2 Tür D-01X 15,00 $ 2 Süd Amir 15.03.2016
3 Engine ENG-0161 330,00 $ 2 Norden Sandra 02.07.2016
4 Wheel Riesenrad W-24 20,50 $ 4 West Beth 01.03.2016
5 Feld P-034 6,00 $ 4 Norden Devyn 15.03.2016
6 Feld P-052 11,50 $ 7 Ost Erik 16.05.2016
7 Frame FR-0B1 34 $ 8 Ost Hanna 12.03.2016
8 Wheel Riesenrad W-24 20,50 $ 11 Süd Sheldon 30.04.2016

Filterkriterien

Mit der Methode FilterCriteria wird bestimmt, welche Tabellendaten in einer einfachen Filter- oder Filteransicht ein- oder ausgeblendet werden. Jedes Kriterium hängt von den Werten in einer bestimmten Spalte ab. Sie geben die Filterkriterien als Zuordnung an, wobei die Schlüssel die Spaltenindexe und die Werte die Kriterien sind.

Bei Kriterien, die mit einem booleschen condition-Wert angegeben werden, muss die Bedingung True sein, damit Werte angezeigt werden. Die Bedingung überschreibt hiddenValues nicht. Wenn ein Wert unter hiddenValues aufgeführt ist, werden trotzdem alle Übereinstimmungen für einen Wert ausgeblendet.

Das folgende Codebeispiel zeigt eine Filterkriterienzuordnung:

{
  0: {
    'hiddenValues': ['Panel']
  },
  6: {
    'condition': {
      'type': 'DATE_BEFORE',
      'values': {
        'userEnteredValue': '4/30/2016'
      }
    }
  }
}

Bei Anwendung auf die Beispielverkaufsdaten zeigt dieses Kriterium nur Zeilen an, in denen „Artikelkategorie“ nicht „Bereich“ ist und bei denen das „Versanddatum“ vor dem 30. April 2016 liegt.

Table 3 Verkaufsdaten unter Verwendung von Filterkriterien
A B C D E F G
1 Artikelkategorie Modellnummer Kosten Menge Region Vertriebsmitarbeiter Versanddatum
2 Wheel Riesenrad W-24 20,50 $ 4 West Beth 01.03.2016
3 Tür D-01X 15,00 $ 2 Süd Amir 15.03.2016
4 Frame FR-0B1 34 $ 8 Ost Hanna 12.03.2016

Beispiel

Das folgende Codebeispiel zeigt, wie Sie eine Filteransicht erstellen, duplizieren und dann die duplizierte Version anhand der obigen Beispielverkaufsdaten aktualisieren.

Python

sheets/Snippets/sheets_filter_views.py
import google.auth
from googleapiclient.discovery import build
from googleapiclient.errors import HttpError


def filter_views(spreadsheet_id):
  """
  Creates the batch_update the user has access to.
  Load pre-authorized user credentials from the environment.
  TODO(developer) - See https://developers.google.com/identity
  for guides on implementing OAuth2 for the application.
  """
  creds, _ = google.auth.default()
  # pylint: disable=maybe-no-member
  try:
    service = build("sheets", "v4", credentials=creds)

    my_range = {
        "sheetId": 0,
        "startRowIndex": 0,
        "startColumnIndex": 0,
    }
    addfilterviewrequest = {
        "addFilterView": {
            "filter": {
                "title": "Sample Filter",
                "range": my_range,
                "sortSpecs": [{
                    "dimensionIndex": 3,
                    "sortOrder": "DESCENDING",
                }],
                "criteria": {
                    0: {"hiddenValues": ["Panel"]},
                    6: {
                        "condition": {
                            "type": "DATE_BEFORE",
                            "values": {"userEnteredValue": "4/30/2016"},
                        }
                    },
                },
            }
        }
    }

    body = {"requests": [addfilterviewrequest]}
    addfilterviewresponse = (
        service.spreadsheets()
        .batchUpdate(spreadsheetId=spreadsheet_id, body=body)
        .execute()
    )

    duplicatefilterviewrequest = {
        "duplicateFilterView": {
            "filterId": addfilterviewresponse["replies"][0]["addFilterView"][
                "filter"
            ]["filterViewId"]
        }
    }

    body = {"requests": [duplicatefilterviewrequest]}
    duplicatefilterviewresponse = (
        service.spreadsheets()
        .batchUpdate(spreadsheetId=spreadsheet_id, body=body)
        .execute()
    )

    updatefilterviewrequest = {
        "updateFilterView": {
            "filter": {
                "filterViewId": duplicatefilterviewresponse["replies"][0][
                    "duplicateFilterView"
                ]["filter"]["filterViewId"],
                "title": "Updated Filter",
                "criteria": {
                    0: {},
                    3: {
                        "condition": {
                            "type": "NUMBER_GREATER",
                            "values": {"userEnteredValue": "5"},
                        }
                    },
                },
            },
            "fields": {"paths": ["criteria", "title"]},
        }
    }

    body = {"requests": [updatefilterviewrequest]}
    updatefilterviewresponse = (
        service.spreadsheets()
        .batchUpdate(spreadsheetId=spreadsheet_id, body=body)
        .execute()
    )
    print(str(updatefilterviewresponse))
  except HttpError as error:
    print(f"An error occurred: {error}")


if __name__ == "__main__":
  # Pass: spreadsheet_id
  filter_views("1CM29gwKIzeXsAppeNwrc8lbYaVMmUclprLuLYuHog4k")