Filtry

Filtry umożliwiają sortowanie i filtrowanie danych wyświetlanych w arkuszu kalkulacyjnym. Filtry nie zmieniają wartości danych w arkuszu kalkulacyjnym. Możesz używać filtrów, aby tymczasowo ukrywać lub sortować informacje. Dane, które spełniają określone kryteria filtra, nie są wyświetlane, gdy filtr jest włączony. Dzięki widokom filtrów możesz też zapisywać różne nazwane filtry i przełączać się między nimi w dowolnym momencie.

Oto kilka przykładowych zastosowań filtrów:

  • Sortować dane według konkretnej kolumny. Możesz na przykład posortować rekordy użytkowników według nazwiska.
  • ukrywać dane spełniające określony warunek; Możesz na przykład ukryć wszystkie rekordy starsze niż 2 lata.
  • Ukrywanie danych, które pasują do określonej wartości. Możesz na przykład ukryć wszystkie problemy o stanie „zamknięty”.

Filtr podstawowy

BasicFilter arkusza kalkulacyjnego to domyślny filtr, który jest stosowany, gdy ktoś wyświetla arkusz. Arkusz może mieć 1 filtr podstawowy na arkusz. Możesz wyłączyć filtr podstawowy, usuwając go. Spowoduje to usunięcie filtra i wszystkich jego ustawień z arkusza kalkulacyjnego. Jeśli chcesz ponownie włączyć ten sam filtr, musisz ponownie ustawić kryteria.

Zarządzanie filtrem podstawowym

Aby ustawić lub wyczyścić filtr podstawowy, użyj metody spreadsheets.batchUpdate z odpowiednim typem żądania:

Aby wyświetlić podstawowy filtr, użyj metody spreadsheets.get i ustaw parametr adresu URL fields na sheets/basicFilter. Poniższy przykładowy kodspreadsheets.get pokazuje adres URL arkusza Google z maską pola:

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

Widoki filtrów

FilterView to nazwany filtr, który możesz włączać i wyłączać w dowolnym momencie. Arkusz może zawierać wiele widoków filtra, ale w danym momencie możesz zastosować tylko jeden.

Oto kilka przykładowych zastosowań widoków filtrów:

  • Masz kilka różnych filtrów, między którymi chcesz się przełączać podczas wyświetlania danych.
  • Nie masz uprawnień do edytowania arkusza kalkulacyjnego, ale chcesz zastosować filtr. W takim przypadku możesz utworzyć tymczasowy widok filtra, który jest widoczny tylko dla Ciebie.
  • Chcesz, aby każda osoba, której udostępnisz arkusz kalkulacyjny, wyświetlała dane w inny sposób. Możesz określić widok przefiltrowany, który chcesz zastosować, podając spreadsheetId i filterViewId w adresie URL arkusza kalkulacyjnego. Aby to zrobić, użyj parametru filterViewId zwróconego w odpowiedzi podczas tworzenia widoku filtra.

    Poniższy przykładowy kod pokazuje adres URL Arkuszy Google z widokiem filtra:

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

Zarządzanie widokami filtra

Aby utworzyć, zduplikować, zmodyfikować lub usunąć widoki przefiltrowane, użyj metody spreadsheets.batchUpdate z odpowiednim typem żądania:

Aby wyświetlić listę wszystkich widoków danych z filtrem, użyj metody spreadsheets.get i ustaw parametr adresu URL fields na sheets/filterViews. Poniższy przykładowy kodspreadsheets.get pokazuje adres URL arkusza Google z maską pola:

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

Reprezentacja filtra

Poniższy przykład kodu przedstawia reprezentację JSON obiektu FilterView. Obiekt BasicFilter jest taki sam, z wyjątkiem tego, że nie zawiera pól filterViewIdtitle i nie może używać zakresu nazwanego.

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

Przykładowe dane

W pozostałej części tego dokumentu będziemy odwoływać się do przykładowej tabeli danych o sprzedaży poniżej:

Tabela 1. Przykładowe dane o sprzedaży
A B C D E F G
1 Kategoria produktu Numer modelu Koszt Ilość Region Pracownik działu sprzedaży Data wysyłki
2 Diabelski młyn W-24 20,50 USD 4 zachód Beth 01.03.2016
3 Drzwi D-01X 15 zł 2 południe Amir 15.03.2016 r.
4 Rama FR-0B1 34 USD 8 wschód Hannah 12.03.2016 r.
5 Panel P-034 18 PLN 4 północ Devyn 15.03.2016 r.
6 Panel P-052 11,50 USD 7 wschód Erik 16.05.2016 r.
7 Diabelski młyn W-24 20,50 USD 11 południe Sheldon 30.04.2016 r.
8 Silnik ENG-0161 330 USD 2 północ Jessie 02.07.2016 r.

Specyfikacje sortowania

Filtr może mieć wiele specyfikacji sortowania. Te specyfikacje określają sposób sortowania danych i są stosowane w podanej kolejności. Atrybut SortSpec.dimensionIndex określa indeks kolumny, do której ma być zastosowane sortowanie.

Poniższy przykładowy kod pokazuje specyfikację sortowania:

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

W przypadku zastosowania do przykładowych danych o sprzedaży ta specyfikacja sortuje najpierw według kolumny „Quantity”, a potem, jeśli 2 wiersze mają tę samą ilość, według kolumny „Ship Date”.

Tabela 2. Dane o sprzedaży posortowane według 2 kolumn
A B C D E F G
1 Kategoria produktu Numer modelu Koszt Ilość Region Pracownik działu sprzedaży Data wysyłki
2 Drzwi D-01X 15 zł 2 południe Amir 15.03.2016 r.
3 Silnik ENG-0161 330 USD 2 północ Jessie 02.07.2016 r.
4 Diabelski młyn W-24 20,50 USD 4 zachód Beth 01.03.2016
5 Panel P-034 18 PLN 4 północ Devyn 15.03.2016 r.
6 Panel P-052 11,50 USD 7 wschód Erik 16.05.2016 r.
7 Rama FR-0B1 34 USD 8 wschód Hannah 12.03.2016 r.
8 Diabelski młyn W-24 20,50 USD 11 południe Sheldon 30.04.2016 r.

Kryteria filtra

Metoda FilterCriteria określa, które dane arkusza kalkulacyjnego są wyświetlane lub ukrywane w podstawowym filtrze lub widoku filtra. Każde kryterium zależy od wartości w określonej kolumnie. Kryteria filtrowania podajesz w postaci mapy, w której kluczami są indeksy kolumn, a wartościami – kryteria.

W przypadku kryteriów określonych za pomocą wartości logicznej condition warunek musi mieć wartość True, aby wyświetlać wartości. Warunek nie zastępuje hiddenValues. Jeśli wartość jest wymieniona w sekcji hiddenValues, wszystkie pasujące do niej wyniki są nadal ukryte.

Poniższy przykładowy kod pokazuje mapę kryteriów filtra:

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

W przypadku przykładowych danych o sprzedaży to kryterium wyświetla tylko wiersze, w których „Kategoria produktu” nie jest równa „Panel” i w których „Data wysyłki” przypada przed 30 kwietnia 2016 r.

Tabela 3. Dane o sprzedaży z użyciem kryteriów filtrowania
A B C D E F G
1 Kategoria produktu Numer modelu Koszt Ilość Region Pracownik działu sprzedaży Data wysyłki
2 Diabelski młyn W-24 20,50 USD 4 zachód Beth 01.03.2016
3 Drzwi D-01X 15 zł 2 południe Amir 15.03.2016 r.
4 Rama FR-0B1 34 USD 8 wschód Hannah 12.03.2016 r.

Przykład

Poniższy przykładowy kod pokazuje, jak utworzyć widok filtra, zduplikować go, a następnie zaktualizować zduplikowaną wersję za pomocą przykładowych danych o sprzedaży podanych powyżej.

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")