Bộ lọc

Bộ lọc cho phép bạn sắp xếp và lọc dữ liệu mà bạn thấy khi xem bảng tính. Bộ lọc không thay đổi các giá trị dữ liệu trong bảng tính. Bạn có thể sử dụng bộ lọc để tạm thời ẩn hoặc sắp xếp thông tin. Dữ liệu khớp với tiêu chí bộ lọc đã chỉ định sẽ không xuất hiện khi bộ lọc đang bật. Với chế độ xem bộ lọc, bạn cũng có thể lưu nhiều bộ lọc có tên khác nhau và chuyển đổi giữa các bộ lọc đó bất cứ khi nào bạn muốn.

Dưới đây là một số trường hợp sử dụng mẫu cho bộ lọc:

  • Sắp xếp dữ liệu theo một cột cụ thể. Ví dụ: sắp xếp bản ghi người dùng theo tên.
  • Ẩn dữ liệu đáp ứng một điều kiện cụ thể. Ví dụ: ẩn tất cả bản ghi cũ hơn 2 năm.
  • Ẩn dữ liệu khớp với một giá trị nhất định. Ví dụ: ẩn tất cả vấn đề có trạng thái "đã đóng".

Bộ lọc cơ bản

BasicFilter cho bảng tính là bộ lọc mặc định được áp dụng bất cứ khi nào có người xem bảng tính. Một bảng tính có thể có một bộ lọc cơ bản cho mỗi trang tính. Bạn có thể tắt bộ lọc cơ bản bằng cách xoá bộ lọc đó. Thao tác này sẽ xoá bộ lọc và tất cả chế độ cài đặt của bộ lọc đó khỏi bảng tính. Nếu muốn bật lại cùng một bộ lọc, bạn phải thiết lập lại tiêu chí.

Quản lý bộ lọc cơ bản

Để đặt hoặc xoá bộ lọc cơ bản, hãy sử dụng phương thức spreadsheets.batchUpdate với loại yêu cầu thích hợp:

Để liệt kê bộ lọc cơ bản, hãy sử dụng phương thức spreadsheets.get và đặt tham số URL fields thành sheets/basicFilter. Mẫu mã spreadsheets.get sau đây cho thấy một URL Google Trang tính có mặt nạ trường:

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

Chế độ xem dạng lọc

FilterView là một bộ lọc được đặt tên mà bạn có thể bật và tắt bất cứ khi nào bạn muốn. Một bảng tính có thể có nhiều chế độ xem bộ lọc, nhưng mỗi lần bạn chỉ có thể áp dụng một chế độ xem.

Dưới đây là một số trường hợp sử dụng mẫu cho thành phần hiển thị bộ lọc:

  • Bạn có một số bộ lọc mà bạn muốn chuyển đổi giữa các bộ lọc đó khi xem dữ liệu.
  • Bạn không có quyền chỉnh sửa bảng tính nhưng vẫn muốn áp dụng bộ lọc. Trong trường hợp này, bạn có thể tạo một chế độ xem bộ lọc tạm thời mà chỉ bạn mới nhìn thấy.
  • Bạn muốn mỗi người mà bạn chia sẻ bảng tính của mình có thể xem dữ liệu theo cách khác nhau. Bạn có thể chỉ định chế độ xem bộ lọc mà bạn muốn áp dụng bằng cách cung cấp spreadsheetIdfilterViewId trong URL của bảng tính. Để thực hiện việc này, hãy sử dụng filterViewId được trả về trong phản hồi khi bạn tạo thành phần hiển thị bộ lọc.

    Mã mẫu sau đây cho thấy một URL Google Trang tính có chế độ xem bộ lọc:

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

Quản lý chế độ xem bộ lọc

Để tạo, sao chép, sửa đổi hoặc xoá chế độ xem bộ lọc, hãy sử dụng phương thức spreadsheets.batchUpdate với loại yêu cầu thích hợp:

Để liệt kê tất cả chế độ xem bộ lọc, hãy sử dụng phương thức spreadsheets.get và đặt tham số URL fields thành sheets/filterViews. Mẫu mã spreadsheets.get sau đây cho thấy một URL Google Trang tính có mặt nạ trường:

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

Biểu thị bộ lọc

Mã mẫu sau đây cho thấy cách biểu diễn JSON cho đối tượng FilterView. Đối tượng BasicFilter cũng giống như vậy, ngoại trừ việc đối tượng này thiếu các trường filterViewIdtitle, đồng thời không thể sử dụng dải ô được đặt tên.

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

Dữ liệu mẫu

Phần còn lại của tài liệu này tham chiếu đến bảng dữ liệu bán hàng mẫu dưới đây:

Bảng 1. Dữ liệu bán hàng mẫu
A B C D E F G
1 Danh mục mặt hàng Số kiểu máy Chi phí Số lượng Khu vực Nhân viên bán hàng Ngày giao hàng
2 Bánh xe W-24 20,5 USD 4 Tây Beth 1/3/2016
3 Cửa ra vào D-01X 15 đô la 2 Nam Amir 15/3/2016
4 Khung FR-0B1 34 USD 8 Đông Hannah 12/3/2016
5 Bảng điều khiển P-034 6 USD 4 Bắc Devyn 15/3/2016
6 Bảng điều khiển P-052 11,5 USD 7 Đông Erik 16/5/2016
7 Bánh xe W-24 20,5 USD 11 Nam Sheldon 30/4/2016
8 Động cơ ENG-0161 330 đô la Mỹ 2 Bắc Jessie 2/7/2016

Thông số kỹ thuật về cách sắp xếp

Một bộ lọc có thể có nhiều thông số sắp xếp. Các thông số kỹ thuật này xác định cách sắp xếp dữ liệu và được áp dụng theo thứ tự đã chỉ định. Thuộc tính SortSpec.dimensionIndex chỉ định chỉ mục cột mà bạn muốn áp dụng kiểu sắp xếp.

Mã mẫu sau đây cho thấy thông số kỹ thuật sắp xếp:

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

Khi áp dụng cho dữ liệu bán hàng mẫu, thông số kỹ thuật này sẽ sắp xếp theo "Số lượng" trước, sau đó nếu 2 hàng có cùng số lượng thì sẽ sắp xếp theo "Ngày giao hàng".

Bảng 2. Dữ liệu bán hàng được sắp xếp theo 2 cột
A B C D E F G
1 Danh mục mặt hàng Số kiểu máy Chi phí Số lượng Khu vực Nhân viên bán hàng Ngày giao hàng
2 Cửa ra vào D-01X 15 đô la 2 Nam Amir 15/3/2016
3 Động cơ ENG-0161 330 đô la Mỹ 2 Bắc Jessie 2/7/2016
4 Bánh xe W-24 20,5 USD 4 Tây Beth 1/3/2016
5 Bảng điều khiển P-034 6 USD 4 Bắc Devyn 15/3/2016
6 Bảng điều khiển P-052 11,5 USD 7 Đông Erik 16/5/2016
7 Khung FR-0B1 34 USD 8 Đông Hannah 12/3/2016
8 Bánh xe W-24 20,5 USD 11 Nam Sheldon 30/4/2016

Tiêu chí lọc

Phương thức FilterCriteria xác định dữ liệu bảng tính nào sẽ hiển thị hoặc bị ẩn trong một bộ lọc cơ bản hoặc chế độ xem bộ lọc. Mỗi tiêu chí phụ thuộc vào các giá trị trong một cột cụ thể. Bạn cung cấp tiêu chí lọc dưới dạng một bản đồ, trong đó khoá là chỉ mục cột và giá trị là tiêu chí.

Đối với tiêu chí được chỉ định bằng boolean condition, điều kiện phải là True để các giá trị hiển thị. Điều kiện này không ghi đè hiddenValues. Nếu một giá trị được liệt kê trong hiddenValues, thì tất cả giá trị trùng khớp vẫn bị ẩn.

Mã mẫu sau đây cho thấy một bản đồ tiêu chí bộ lọc:

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

Khi áp dụng cho dữ liệu bán hàng mẫu, tiêu chí này chỉ hiển thị các hàng có "Danh mục mặt hàng" không phải là "Bảng điều khiển" và "Ngày vận chuyển" trước ngày 30 tháng 4 năm 2016.

Bảng 3. Dữ liệu lượt bán hàng bằng tiêu chí lọc
A B C D E F G
1 Danh mục mặt hàng Số kiểu máy Chi phí Số lượng Khu vực Nhân viên bán hàng Ngày giao hàng
2 Bánh xe W-24 20,5 USD 4 Tây Beth 1/3/2016
3 Cửa ra vào D-01X 15 đô la 2 Nam Amir 15/3/2016
4 Khung FR-0B1 34 USD 8 Đông Hannah 12/3/2016

Mẫu

Mã mẫu sau đây cho biết cách tạo một thành phần hiển thị bộ lọc, sao chép thành phần hiển thị đó, sau đó cập nhật phiên bản được sao chép bằng dữ liệu bán hàng mẫu ở trên.

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