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í 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 các bộ lọc được đặt 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.

Sau đây là một số ví dụ về trường hợp sử dụng bộ lọc:

  • Sắp xếp dữ liệu theo một cột cụ thể. Ví dụ: sắp xếp hồ sơ người dùng theo họ.
  • Ẩ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 của 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ỗi trang trong bảng tính có thể có một bộ lọc cơ bản. 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à mọi chế độ cài đặt của bộ lọc đó khỏi bảng tính. Nếu muốn bật lại bộ lọc đó, bạn phải đặt 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 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 của 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ê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 bạn chỉ có thể áp dụng một chế độ xem tại một thời điểm.

Sau đây là một số ví dụ về trường hợp sử dụng chế độ xem bộ lọc:

  • Bạn có một số bộ lọc khác nhau 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 đều 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. Để làm như vậy, hãy sử dụng filterViewId được trả về trong phản hồi khi bạn tạo chế độ xem 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ả cá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 của Google Trang tính có mặt nạ trường:

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

Biểu diễn bộ lọc

Mẫu mã sau đây minh hoạ biểu thị JSON cho một đối tượng FilterView. Đối tượng BasicFilter cũng tương tự, ngoại trừ việc đối tượng này không có 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 bên dưới:

Bảng 1. Ví dụ về dữ liệu bán hàng
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 USD 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 115.000 VND 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 USD 2 Bắc Jessie 2/7/2016

Quy cách sắp xếp

Một bộ lọc có thể có nhiều quy cách sắp xếp. Các quy cách 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à tiêu chí sắp xếp sẽ được áp dụng.

Mã mẫu sau đây cho thấy một quy cách 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, quy cách 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 vận chuyển".

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 USD 2 Nam Amir 15/3/2016
3 Động cơ ENG-0161 330 USD 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 115.000 VND 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 nào trong bảng tính sẽ xuất hiện hoặc bị ẩn trong 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 đó các khoá là chỉ mục cột và các giá trị là tiêu chí.

Đối với tiêu chí được chỉ định bằng giá trị boolean condition, điều kiện phải là True để các giá trị xuất hiện. Đ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ả các kết quả trùng khớp cho một giá trị vẫn bị ẩn.

Mã mẫu sau đây cho thấy một bản đồ tiêu chí 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ị những hàng có "Danh mục mặt hàng" không phải là "Tấm" và "Ngày vận chuyển" trước ngày 30 tháng 4 năm 2016.

Bảng 3. Dữ liệu bán hàng sử dụ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 USD 2 Nam Amir 15/3/2016
4 Khung FR-0B1 34 USD 8 Đông Hannah 12/3/2016

Mẫu

Mẫu mã sau đây cho biết cách tạo một khung hiển thị bộ lọc, sao chép khung hiển thị đó rồi cập nhật phiên bản đã sao chép bằng cách sử dụ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")