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 giá trị dữ liệu trong bảng tính của bạn. 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 các bộ lọc khác nhau đã đặt tên 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 cột cụ thể. Ví dụ: sắp xếp bản ghi 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ả cá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ả cá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ó ai đó 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 này. 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 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ã mẫu spreadsheets.get sau đây cho thấy một URL trên 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ể tắt và bậ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 bộ lọc tại một thời điểm.

Sau đây là một số trường hợp sử dụng mẫu cho 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 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 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 được bạn chia sẻ bảng tính xem dữ liệu theo cách khác nhau. Bạn có thể chỉ định chế độ xem bộ lọc mà mình 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 chế độ xem bộ lọc.

    Mã mẫu sau đây cho thấy URL trên 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ã mẫu spreadsheets.get sau đây cho thấy một URL trên 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ã mẫu sau đây cho thấy bản trình bày JSON cho đối tượng FilterView. Đối tượng BasicFilter giống nhau, ngoại trừ việc thiếu 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 khảo bảng dữ liệu bán hàng mẫu dưới đây:

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 Vòng đu quay W-24 20,5 USD 4 Tây Beth 1/3/2016
3 Cửa ra vào D-01X 15 USD 2 Nam Tiếng Amir 15/3/2016
4 Khung Pháp-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 Dũng 16/5/2016
7 Vòng đu quay W-24 20,5 USD 11 Nam Sheldon 30/4/2016
8 Động cơ ENG-0161 330 USD 2 Bắc Jessie Ngày 2 tháng 7 năm 2016

Quy cách sắp xếp

Một bộ lọc có thể có nhiều thông số kỹ thuật 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 sẽ áp dụng cách sắp xếp.

Mã mẫu sau đây cho thấy 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ắp xếp theo "Số lượng" trước, sau đó sắp xếp theo "Ngày giao hàng" nếu 2 hàng có cùng số lượ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 USD 2 Nam Tiếng Amir 15/3/2016
3 Động cơ ENG-0161 330 USD 2 Bắc Jessie Ngày 2 tháng 7 năm 2016
4 Vòng đu quay 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 Dũng 16/5/2016
7 Khung Pháp-0B1 34 USD 8 Đông Hannah 12/3/2016
8 Vòng đu quay W-24 20,5 USD 11 Nam Sheldon 30/4/2016

Lọc tiêu chí

Phương thức FilterCriteria xác định dữ liệu bảng tính nào sẽ xuất hiện hoặc bị ẩn trong một bộ lọc hoặc chế độ xem bộ lọc cơ bản. 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í bộ lọc dưới dạng 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 giá trị boolean condition, điều kiện phải là True thì giá trị mới được hiển thị. Điều kiện đó không ghi đè hiddenValues. Nếu một giá trị được liệt kê trong hiddenValues, thì mọi kết quả trùng khớp với 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ị các hàng trong đó "Danh mục mặt hàng" không phải là "Bảng điều khiển" và "Ngày giao hàng" là 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 Vòng đu quay W-24 20,5 USD 4 Tây Beth 1/3/2016
3 Cửa ra vào D-01X 15 USD 2 Nam Tiếng Amir 15/3/2016
4 Khung Pháp-0B1 34 USD 8 Đông Hannah 12/3/2016

Mẫu

Mã mẫu sau đây cho biết cách tạo chế độ xem bộ lọc, sao chép chế độ xem đó, rồi cập nhật phiên bản trùng lặp bằng cách sử dụng dữ liệu bán hàng mẫu ở trên.

Python

trang tính/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")