Фильтры

Фильтры позволяют сортировать и фильтровать данные, которые вы видите при просмотре электронной таблицы. Фильтры не меняют значения данных в вашей электронной таблице. Вы можете использовать фильтры, чтобы временно скрыть или отсортировать информацию. Данные, соответствующие указанным критериям фильтра, не отображаются, пока фильтр включен. С помощью представлений фильтров вы также можете сохранять различные именованные фильтры и переключаться между ними в любое время.

Ниже приведены некоторые примеры использования фильтров:

  • Сортировка данных по определенному столбцу. Например, отсортируйте записи пользователей по фамилии.
  • Скрыть данные, соответствующие определенному условию. Например, скрыть все записи старше 2 лет.
  • Скрыть данные, соответствующие определенному значению. Например, скрыть все задачи со статусом «закрыто».

Базовый фильтр

BasicFilter для электронной таблицы — это фильтр по умолчанию, который применяется при каждом просмотре электронной таблицы. На каждом листе электронной таблицы может быть один базовый фильтр. Базовый фильтр можно отключить, очистив его. При этом фильтр и все его настройки будут удалены из электронной таблицы. Если вы хотите снова включить тот же фильтр, вам необходимо заново установить критерии.

Управление базовым фильтром

Чтобы установить или очистить базовый фильтр, используйте метод spreadsheets.batchUpdate с соответствующим типом запроса:

  • Чтобы установить базовый фильтр, используйте метод SetBasicFilterRequest .
  • Чтобы очистить базовый фильтр, используйте метод ClearBasicFilterRequest .

Чтобы просмотреть базовый фильтр, используйте метод spreadsheets.get и установите для параметра URL-адреса fields sheets/basicFilter . В следующем примере кода spreadsheets.get показан URL-адрес Google Таблиц с маской поля :

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

Фильтровать представления

FilterView — это именованный фильтр, который можно отключать и включать в любое время. В электронной таблице может быть несколько представлений фильтров, но одновременно можно применять только одно.

Ниже приведены некоторые примеры вариантов использования представлений фильтров:

  • У вас есть несколько различных фильтров, между которыми вы хотите переключаться при просмотре данных.
  • У вас нет доступа к редактированию таблицы, но вы все равно хотите применить фильтр. В этом случае вы можете создать временное представление фильтра, которое будет видно только вам.
  • Вы хотите, чтобы каждый человек, с которым вы делитесь своей электронной таблицей, просматривал данные по-разному. Вы можете указать представление фильтра, которое хотите применить, указав spreadsheetId и filterViewId в URL-адресе электронной таблицы. Для этого используйте filterViewId , возвращаемый в ответе при создании представления фильтра.

    В следующем примере кода показан URL-адрес Google Таблиц с фильтром:

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

Управление представлениями фильтров

Чтобы создать, дублировать, изменить или удалить представления фильтров, используйте метод spreadsheets.batchUpdate с соответствующим типом запроса:

  • Чтобы создать представление фильтра, используйте метод AddFilterViewRequest .
  • Чтобы создать копию представления фильтра, используйте метод DuplicateFilterViewRequest .
  • Чтобы изменить свойства представления фильтра, используйте метод UpdateFilterViewRequest .
  • Чтобы удалить представление фильтра, используйте метод DeleteFilterViewRequest .

Чтобы вывести список всех представлений фильтров, используйте метод spreadsheets.get и установите для параметра URL- fields sheets/filterViews . В следующем примере кода spreadsheets.get показан URL-адрес Google Таблиц с маской поля :

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

Представление фильтра

В следующем примере кода показано представление JSON для объекта FilterView . Объект BasicFilter аналогичен, за исключением того, что в нем отсутствуют поля filterViewId и title , а также он не может использовать именованный диапазон.

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

Пример данных

Остальная часть этого документа ссылается на приведенный ниже пример таблицы данных о продажах:

Таблица 1. Пример данных о продажах
А Б С Д Э Ф г
1 Категория товара Номер модели Расходы Количество Область Продавец Дата отправки
2 Колесо W-24 20,50 долларов США 4 Запад Бет 01.03.2016
3 Дверь D-01X 15,00 долларов США 2 Юг Амир 15.03.2016
4 Рамка ФР-0Б1 $34,00 8 Восток Ханна 12.03.2016
5 Панель Р-034 $6,00 4 Север Девин 15.03.2016
6 Панель Р-052 11,50 долларов США 7 Восток Эрик 16.05.2016
7 Колесо W-24 20,50 долларов США 11 Юг Шелдон 30.04.2016
8 Двигатель РУС-0161 $330,00 2 Север Джесси 02.07.2016

Сортировать характеристики

Фильтр может иметь несколько спецификаций сортировки. Эти спецификации определяют способ сортировки данных и применяются в указанном порядке. Атрибут SortSpec.dimensionIndex указывает индекс столбца, к которому следует применить сортировку.

В следующем примере кода показана спецификация сортировки:

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

Применительно к примеру данных о продажах эта спецификация сначала сортирует по «Количества», а затем, если две строки содержат одинаковое количество, по «Дате отгрузки».

Таблица 2. Данные о продажах, отсортированные по 2 столбцам
А Б С Д Э Ф г
1 Категория товара Номер модели Расходы Количество Область Продавец Дата отправки
2 Дверь D-01X 15,00 долларов США 2 Юг Амир 15.03.2016
3 Двигатель РУС-0161 $330,00 2 Север Джесси 02.07.2016
4 Колесо W-24 20,50 долларов США 4 Запад Бет 01.03.2016
5 Панель Р-034 $6,00 4 Север Девин 15.03.2016
6 Панель Р-052 11,50 долларов США 7 Восток Эрик 16.05.2016
7 Рамка ФР-0Б1 $34,00 8 Восток Ханна 12.03.2016
8 Колесо W-24 20,50 долларов США 11 Юг Шелдон 30.04.2016

Критерии фильтра

Метод FilterCriteria определяет, какие данные электронной таблицы отображаются или скрываются в базовом фильтре или представлении фильтра. Каждый критерий зависит от значений в определенном столбце. Критерии фильтра предоставляются в виде карты, где ключи — это индексы столбцов, а значения — критерии.

Для критериев, заданных с использованием логического condition , условие должно иметь True , чтобы значения отображались. Условие не hiddenValues . Если значение указано в списке hiddenValues , все совпадения для значения по-прежнему скрыты.

В следующем примере кода показана карта критериев фильтра:

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

При применении к примеру данных о продажах этот критерий отображает только строки, в которых «Категория товара» не является «Панель» и где «Дата отгрузки» находится до 30 апреля 2016 г.

Таблица 3. Данные о продажах с использованием критериев фильтра
А Б С Д Э Ф г
1 Категория товара Номер модели Расходы Количество Область Продавец Дата отправки
2 Колесо W-24 20,50 долларов США 4 Запад Бет 01.03.2016
3 Дверь D-01X 15,00 долларов США 2 Юг Амир 15.03.2016
4 Рамка ФР-0Б1 $34,00 8 Восток Ханна 12.03.2016

Образец

В следующем примере кода показано, как создать представление фильтра, продублировать его, а затем обновить дублированную версию, используя приведенный выше пример данных о продажах .

Питон

листы/фрагменты/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")