필터

필터를 사용하면 스프레드시트를 볼 때 표시되는 데이터를 정렬하고 필터링할 수 있습니다. 필터는 스프레드시트의 데이터 값을 변경하지 않습니다. 필터를 사용하여 정보를 일시적으로 숨기거나 정렬할 수 있습니다. 지정된 필터 기준과 일치하는 데이터는 필터가 사용 설정되어 있으면 표시되지 않습니다. 또한 필터 보기를 사용하면 이름이 지정된 여러 필터를 저장하고 원할 때 필터 간에 전환할 수 있습니다.

다음은 필터의 몇 가지 사용 사례입니다.

  • 특정 열을 기준으로 데이터를 정렬합니다. 예를 들어 성을 기준으로 사용자 레코드를 정렬합니다.
  • 특정 조건을 충족하는 데이터를 숨깁니다. 예를 들어 2년 이상 된 레코드를 모두 숨깁니다.
  • 특정 값과 일치하는 데이터를 숨깁니다. 예를 들어 '종료됨' 상태의 모든 문제를 숨깁니다.

기본 필터

스프레드시트의 BasicFilter는 스프레드시트를 볼 때마다 적용되는 기본 필터입니다. 스프레드시트에는 시트당 하나의 기본 필터가 있을 수 있습니다. 기본 필터를 지우면 사용 중지됩니다. 이렇게 하면 스프레드시트에서 필터와 모든 설정이 삭제됩니다. 동일한 필터를 다시 사용하려면 기준을 다시 설정해야 합니다.

기본 필터 관리

기본 필터를 설정하거나 삭제하려면 spreadsheets.batchUpdate 메서드를 적절한 요청 유형과 함께 사용합니다.

기본 필터를 나열하려면 spreadsheets.get 메서드를 사용하고 fields URL 매개변수를 sheets/basicFilter로 설정합니다. 다음 spreadsheets.get 코드 샘플은 필드 마스크가 포함된 Google Sheets URL을 보여줍니다.

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

필터 보기

FilterView는 언제든지 끄고 켤 수 있는 이름이 지정된 필터입니다. 스프레드시트 하나에 여러 필터 보기가 있을 수 있지만 한 번에 하나씩만 적용할 수 있습니다.

다음은 필터 보기의 몇 가지 사용 사례입니다.

  • 데이터를 볼 때 전환하고자 하는 필터가 여러 개 있습니다.
  • 스프레드시트에 대한 수정 액세스 권한이 없지만 필터를 적용하려는 경우 이 경우 나에게만 표시되는 임시 필터 보기를 만들 수 있습니다.
  • 스프레드시트를 공유하는 사람마다 데이터를 다르게 볼 수 있습니다. 스프레드시트 URL에 spreadsheetIdfilterViewId를 제공하여 적용할 필터 뷰를 지정할 수 있습니다. 이렇게 하려면 필터 뷰를 만들 때 응답에 반환된 filterViewId를 사용하세요.

    다음 코드 샘플은 필터 보기가 포함된 Google Sheets URL을 보여줍니다.

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

필터 보기 관리

필터 뷰를 만들거나, 복제하거나, 수정하거나, 삭제하려면 spreadsheets.batchUpdate 메서드를 적절한 요청 유형과 함께 사용합니다.

모든 필터 뷰를 나열하려면 spreadsheets.get 메서드를 사용하고 fields URL 매개변수를 sheets/filterViews로 설정합니다. 다음 spreadsheets.get 코드 샘플은 필드 마스크가 포함된 Google Sheets URL을 보여줍니다.

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

필터 표현

다음 코드 샘플은 FilterView 객체의 JSON 표현을 보여줍니다. BasicFilter 객체는 filterViewIdtitle 필드가 없고 이름이 지정된 범위를 사용할 수 없다는 점을 제외하면 동일합니다.

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

예시 데이터

이 문서의 나머지 부분에서는 아래의 판매 데이터 표 예를 참고합니다.

표 1. 판매 데이터 예시
A B C D E F G
1 항목 카테고리 모델 번호 비용 수량 지역 영업 담당자 배송 날짜
2 관람차 W-24 20.50달러 4 서부 베스 2016년 3월 1일
3 D-01X 15달러 2 남부 아미르 2016년 3월 15일
4 프레임 FR-0B1 34달러 8 동부 Hannah 2016년 3월 12일
5 패널 P-034 6달러 4 데빈 2016년 3월 15일
6 패널 P-052 11.50달러 7 동부 에리크 2016년 5월 16일
7 관람차 W-24 20.50달러 11 남부 Sheldon 2016년 4월 30일
8 엔진 ENG-0161 330.00달러 2 제시 2016년 7월 2일

정렬 사양

필터에는 여러 정렬 지정이 있을 수 있습니다. 이러한 사양은 데이터를 정렬하는 방법을 결정하며 지정된 순서대로 적용됩니다. SortSpec.dimensionIndex 속성은 정렬이 적용되어야 하는 열 색인을 지정합니다.

다음 코드 샘플은 정렬 사양을 보여줍니다.

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

판매 데이터 예시에 적용하면 이 사양은 먼저 '수량'을 기준으로 정렬한 후 2개 행의 수량이 같은 경우 '배송일'을 기준으로 정렬합니다.

표 2. 2열을 기준으로 정렬된 판매 데이터
A B C D E F G
1 항목 카테고리 모델 번호 비용 수량 지역 영업 담당자 배송 날짜
2 D-01X 15달러 2 남부 아미르 2016년 3월 15일
3 엔진 ENG-0161 330.00달러 2 제시 2016년 7월 2일
4 관람차 W-24 20.50달러 4 서부 베스 2016년 3월 1일
5 패널 P-034 6달러 4 데빈 2016년 3월 15일
6 패널 P-052 11.50달러 7 동부 에리크 2016년 5월 16일
7 프레임 FR-0B1 34달러 8 동부 Hannah 2016년 3월 12일
8 관람차 W-24 20.50달러 11 남부 Sheldon 2016년 4월 30일

필터링 기준

FilterCriteria 메서드는 기본 필터 또는 필터 뷰에 표시하거나 숨길 스프레드시트 데이터를 결정합니다. 각 기준은 특정 열의 값에 따라 달라집니다. 키는 열 색인이 되고 값은 기준인 맵으로 필터 기준을 제공합니다.

불리언 condition를 사용하여 지정된 기준의 경우 값이 표시되려면 조건이 True이어야 합니다. 조건이 hiddenValues보다 우선 적용되지는 않습니다. 값이 hiddenValues 아래에 나열되는 경우 값과 일치하는 모든 항목이 여전히 숨겨집니다.

다음 코드 샘플은 필터 기준 맵을 보여줍니다.

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

판매 데이터 예시에 적용하면 이 기준은 '상품 카테고리'가 '패널'이 아닌 행 및 '배송 날짜'가 2016년 4월 30일 이전인 행만 표시합니다.

표 3. 필터 기준을 사용한 판매 데이터
A B C D E F G
1 항목 카테고리 모델 번호 비용 수량 지역 영업 담당자 배송 날짜
2 관람차 W-24 20.50달러 4 서부 베스 2016년 3월 1일
3 D-01X 15달러 2 남부 아미르 2016년 3월 15일
4 프레임 FR-0B1 34달러 8 동부 Hannah 2016년 3월 12일

샘플

다음 코드 샘플은 필터 뷰를 만들고 복제한 다음 위의 판매 데이터 예시를 사용하여 복제된 버전을 업데이트하는 방법을 보여줍니다.

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