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żyć filtrów, aby tymczasowo ukryć lub posortować informacje. Dane, które pasują do określonych kryteriów filtra, nie są wyświetlane, gdy filtr jest włączony. Dzięki widokom filtrów możesz też zapisywać różne filtry z nazwami i w dowolnym momencie przełączać się między nimi.

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, które spełniają określony warunek. Możesz na przykład ukryć wszystkie rekordy starsze niż 2 lata.
  • ukrywać dane, które pasują do określonej wartości; Możesz na przykład ukryć wszystkie problemy ze stanem „zamknięty”.

Filtr podstawowy

BasicFilter w arkuszu kalkulacyjnym to domyślny filtr, który jest stosowany za każdym razem, gdy ktoś wyświetla arkusz kalkulacyjny. Arkusz może mieć 1 filtr podstawowy na arkusz. Możesz wyłączyć podstawowy filtr, oczyszczają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ć podstawowy filtr, 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ład koduspreadsheets.get zawiera URL arkusza Google z maską pola:

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

Widoki filtrów

FilterView to filtr o nazwie, który możesz w każdej chwili włączać i wyłączać. Arkusz kalkulacyjny może mieć wiele widoków filtra, ale możesz zastosować tylko jeden naraz.

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

  • Podczas wyświetlania danych chcesz przełączać się między kilkoma różnymi filtrami.
  • Nie masz uprawnień do edycji arkusza kalkulacyjnego, ale chcesz zastosować filtr. W takim przypadku możesz utworzyć tymczasowy widok filtra, który będzie widoczny tylko dla Ciebie.
  • Chcesz, aby każda osoba, której udostępnisz arkusz kalkulacyjny, widziała dane w inny sposób. Aby określić widok filtra, który chcesz zastosować, podaj spreadsheetId i filterViewId w adresie URL arkusza kalkulacyjnego. Aby to zrobić, użyj wartości filterViewIdzwróconej 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 filtrów

Aby utworzyć, powielić, zmodyfikować lub usunąć widoki filtrów, użyj metody spreadsheets.batchUpdate z odpowiednim typem żądania:

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

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

Reprezentacja filtra

Ten przykład kodu pokazuje reprezentację JSON obiektu FilterView. Obiekt BasicFilter jest taki sam, z tym że nie zawiera pól filterViewIdtitle oraz 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

Pozostała część tego dokumentu odwołuje się do przykładowej tabeli danych o sprzedaży:

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 zł 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,00 USD 8 wschód Hannah 12.03.2016
5 Panel P-034 18 PLN 4 północ Devyn 15.03.2016 r.
6 Panel P-052 11,50 PLN 7 wschód Erik 16.05.2016 r.
7 Diabelski młyn W-24 20,50 zł 11 południe Sheldon 30.04.2016 r.
8 Silnik ENG-0161 330 PLN 2 północ Jessie 2.07.2016

Sortowanie specyfikacji

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

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

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

Po zastosowaniu do przykładowych danych o sprzedaży ta specyfikacja sortuje najpierw według kolumny „Ilość”, a potem, jeśli 2 wiersze mają taką samą ilość, według kolumny „Data dostawy”.

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 PLN 2 północ Jessie 2.07.2016
4 Diabelski młyn W-24 20,50 zł 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 PLN 7 wschód Erik 16.05.2016 r.
7 Rama FR-0B1 34,00 USD 8 wschód Hannah 12.03.2016
8 Diabelski młyn W-24 20,50 zł 11 południe Sheldon 30.04.2016 r.

Kryteria filtra

Metoda FilterCriteriaokreśla, które dane arkusza kalkulacyjnego są wyświetlane lub ukryte w podstawowym filtrze lub widoku filtra. Każde kryterium zależy od wartości w konkretnej kolumnie. Kryteria filtrowania podajesz jako mapę, w której klucze to indeksy kolumn, a wartości to kryteria.

Aby wartości były wyświetlane, w przypadku kryteriów określonych za pomocą wartości logicznej condition warunek musi być True. Warunek nie zastępuje hiddenValues. Jeśli wartość jest wymieniona w sekcji hiddenValues, wszystkie pasujące do niej wartości 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'
      }
    }
  }
}

Po zastosowaniu tego kryterium do przykładowych danych o sprzedaży zostaną wyświetlone tylko wiersze, w których kolumna „Kategoria produktu” nie zawiera wartości „Panel”, a kolumna „Data dostawy” zawiera datę wcześniejszą niż 30 kwietnia 2016 r.

Tabela 3. Dane o sprzedaży z użyciem kryteriów filtra
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 zł 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,00 USD 8 wschód Hannah 12.03.2016

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.

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