Управляйте видимостью данных с помощью фильтров.

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

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

Для фильтрации данных, возвращаемых в запросе к API Google Sheets, используйте объект DataFilter . Дополнительную информацию см. в разделе «Чтение, запись и поиск метаданных» .

Варианты использования фильтра

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

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

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

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

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

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

  • Для установки базового фильтра используйте метод SetBasicFilterRequest .
  • Для сброса базового фильтра используйте метод ClearBasicFilterRequest .

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

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

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

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

Варианты использования фильтрованного представления

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

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

    Приведённый ниже пример кода демонстрирует URL-адрес Google Sheets с представлением фильтра:

    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-адрес таблиц с маской поля :

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

JSON-представление фильтра

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

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

Пример данных о продажах

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

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

Спецификации сортировки

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

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

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

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

Таблица 2. Данные о продажах, отсортированные по двум столбцам.
А Б С Д Е Ф Г
1 Категория товара Номер модели Расходы Количество Область Продавец Дата отгрузки
2 Дверь Д-01X 15,00 долларов 2 Юг Амир 15.03.2016
3 Двигатель ENG-0161 330,00 долларов США 2 Север Джесси 07.02.2016
4 Колесо В-24 20,50 долларов 4 Запад Бет 01.03.2016
5 Панель П-034 6,00 долларов 4 Север Девин 15.03.2016
6 Панель П-052 11,50 долларов 7 Восток Эрик 16.05.2016
7 Рамка FR-0B1 34,00 долларов 8 Восток Ханна 12.03.2016
8 Колесо В-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'
      }
    }
  }
}

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

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

Пример кода для отображения фильтра

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

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