ฟิลเตอร์

ตัวกรองช่วยให้คุณจัดเรียงและกรองข้อมูลที่เห็นเมื่อดูสเปรดชีตได้ ตัวกรองจะไม่เปลี่ยนค่าข้อมูลในสเปรดชีต คุณใช้ตัวกรองเพื่อซ่อนหรือจัดเรียงข้อมูลชั่วคราวได้ ข้อมูลที่ตรงกับเกณฑ์ตัวกรองที่ระบุจะไม่ปรากฏขณะที่ตัวกรองเปิดอยู่ มุมมองตัวกรองยังช่วยให้คุณบันทึกตัวกรองที่มีชื่อต่างกันและสลับใช้ตัวกรองเหล่านั้นได้ทุกเมื่อที่ต้องการ

ตัวอย่าง Use Case ของฟิลเตอร์มีดังนี้

  • จัดเรียงข้อมูลตามคอลัมน์ใดคอลัมน์หนึ่ง เช่น จัดเรียงระเบียนผู้ใช้ตามชื่อล่าสุด
  • ซ่อนข้อมูลที่ตรงกับเงื่อนไขที่เฉพาะเจาะจง เช่น ซ่อนระเบียนทั้งหมดที่มีอายุมากกว่า 2 ปี
  • ซ่อนข้อมูลที่ตรงกับค่าหนึ่งๆ เช่น ซ่อนปัญหาทั้งหมดที่มีสถานะ "ปิดแล้ว"

ตัวกรองพื้นฐาน

BasicFilter สำหรับสเปรดชีตคือตัวกรองเริ่มต้นที่จะใช้ทุกครั้งที่มีคนดูสเปรดชีต สเปรดชีตจะมีตัวกรองพื้นฐานได้ 1 รายการต่อชีต คุณปิดตัวกรองพื้นฐานได้โดยล้างตัวกรอง ซึ่งจะนำตัวกรองและการตั้งค่าทั้งหมดออกจากสเปรดชีต หากต้องการเปิดตัวกรองเดิมอีกครั้ง คุณต้องตั้งค่าเกณฑ์อีกครั้ง

จัดการตัวกรองพื้นฐาน

หากต้องการตั้งค่าหรือล้างตัวกรองพื้นฐาน ให้ใช้วิธี spreadsheets.batchUpdate กับคำขอประเภทที่เหมาะสม ดังนี้

  • หากต้องการตั้งค่าตัวกรองพื้นฐาน ให้ใช้เมธอด SetBasicFilterRequest
  • หากต้องการล้างตัวกรองพื้นฐาน ให้ใช้เมธอด ClearBasicFilterRequest

หากต้องการแสดงตัวกรองพื้นฐาน ให้ใช้เมธอด spreadsheets.get และตั้งค่าพารามิเตอร์ URL fields เป็น sheets/basicFilter ตัวอย่างโค้ดspreadsheets.getต่อไปนี้แสดง URL ของ Google ชีตที่มีมาสก์ช่อง

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

มุมมองตัวกรอง

FilterView คือตัวกรองที่มีชื่อซึ่งคุณปิดและเปิดได้ทุกเมื่อที่ต้องการ สเปรดชีตอาจมีมุมมองตัวกรองหลายมุมมอง แต่จะใช้ได้ครั้งละ 1 มุมมองเท่านั้น

ตัวอย่างกรณีการใช้งานมุมมองตัวกรองมีดังนี้

  • คุณมีตัวกรองหลายรายการที่ต้องการสลับใช้เมื่อดูข้อมูล
  • คุณไม่มีสิทธิ์แก้ไขสเปรดชีต แต่ยังคงต้องการใช้ตัวกรอง ในกรณีนี้ คุณสามารถสร้างมุมมองตัวกรองชั่วคราวที่มองเห็นได้เฉพาะคุณ
  • คุณต้องการให้บุคคลแต่ละคนที่คุณแชร์สเปรดชีตด้วยดูข้อมูลในลักษณะที่แตกต่างกัน คุณสามารถระบุมุมมองตัวกรองที่ต้องการใช้โดยระบุ spreadsheetId และ filterViewId ใน URL ของสเปรดชีต โดยให้ใช้ filterViewId ที่แสดงในคำตอบเมื่อคุณสร้างมุมมองตัวกรอง

    ตัวอย่างโค้ดต่อไปนี้แสดง URL ของ Google ชีตที่มีมุมมองตัวกรอง

    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 ของ Google ชีตที่มีมาสก์ช่อง

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

การนำเสนอตัวกรอง

ตัวอย่างโค้ดต่อไปนี้แสดงการแสดง JSON สําหรับออบเจ็กต์ FilterView ออบเจ็กต์ BasicFilter เหมือนกัน ยกเว้นไม่มีฟิลด์ filterViewId และ title และไม่สามารถใช้ช่วงที่มีชื่อ

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

ตัวอย่างข้อมูล

ส่วนที่เหลือของเอกสารนี้จะอ้างอิงถึงตารางตัวอย่างข้อมูลยอดขายด้านล่าง

ตารางที่ 1 ตัวอย่างข้อมูลยอดขาย
A C D E F G
1 หมวดหมู่รายการ หมายเลขรุ่น ค่าใช้จ่าย จำนวน ภูมิภาค พนักงานขาย วันที่จัดส่ง
2 ตั๋วขึ้นชิงช้าสวรรค์ W-24 $20.50 4 ตะวันตก Beth 1/3/2016
3 ประตู D-01X $15.00 2 ใต้ Amir 15/3/2016
4 กรอบ FR-0B1 $34.00 8 ตะวันออก Hannah 12/3/2016
5 แผง P-034 $6.00 4 เหนือ Devyn 15/3/2016
6 แผง P-052 $11.50 7 ตะวันออก อิริค 16/5/2016
7 ตั๋วขึ้นชิงช้าสวรรค์ W-24 $20.50 11 ใต้ Sheldon 30/4/2016
8 เครื่องยนต์ ENG-0161 $330.00 2 เหนือ Jessie 2/7/2016

ข้อกำหนดการจัดเรียง

ตัวกรองอาจมีข้อกำหนดการจัดเรียงหลายรายการ ข้อกำหนดเหล่านี้จะกำหนดวิธีจัดเรียงข้อมูลและนำมาใช้ตามลำดับที่ระบุ แอตทริบิวต์ SortSpec.dimensionIndex จะระบุดัชนีคอลัมน์ที่จะใช้การจัดเรียง

ตัวอย่างโค้ดต่อไปนี้แสดงข้อกําหนดการจัดเรียง

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

เมื่อใช้กับตัวอย่างข้อมูลยอดขาย ข้อกําหนดนี้จะจัดเรียงตาม "จํานวน" ก่อน จากนั้นจะจัดเรียงตาม "วันที่จัดส่ง" หาก 2 แถวมีจํานวนเท่ากัน

ตารางที่ 2 ข้อมูลยอดขายที่จัดเรียงตาม 2 คอลัมน์
A C D E F G
1 หมวดหมู่รายการ หมายเลขรุ่น ค่าใช้จ่าย จำนวน ภูมิภาค พนักงานขาย วันที่จัดส่ง
2 ประตู D-01X $15.00 2 ใต้ Amir 15/3/2016
3 เครื่องยนต์ ENG-0161 $330.00 2 เหนือ Jessie 2/7/2016
4 ตั๋วขึ้นชิงช้าสวรรค์ W-24 $20.50 4 ตะวันตก Beth 1/3/2016
5 แผง P-034 $6.00 4 เหนือ Devyn 15/3/2016
6 แผง P-052 $11.50 7 ตะวันออก อิริค 16/5/2016
7 กรอบ FR-0B1 $34.00 8 ตะวันออก Hannah 12/3/2016
8 ตั๋วขึ้นชิงช้าสวรรค์ W-24 $20.50 11 ใต้ Sheldon 30/4/2016

เกณฑ์การกรอง

วิธีการ FilterCriteria จะกำหนดว่าข้อมูลสเปรดชีตใดที่จะแสดงหรือซ่อนอยู่ในตัวกรองพื้นฐานหรือมุมมองตัวกรอง เกณฑ์แต่ละรายการขึ้นอยู่กับค่าในคอลัมน์ที่เฉพาะเจาะจง คุณต้องระบุเกณฑ์ตัวกรองเป็นแผนที่โดยที่คีย์คือดัชนีคอลัมน์ และค่าคือเกณฑ์

สำหรับเกณฑ์ที่ระบุโดยใช้บูลีน condition เงื่อนไขต้องเป็น Trueเพื่อให้ค่าแสดง เงื่อนไขไม่ได้ลบล้าง hiddenValues หากค่าแสดงอยู่ใน hiddenValues ระบบจะยังคงซ่อนรายการที่ตรงกันทั้งหมดสำหรับค่านั้น

ตัวอย่างโค้ดต่อไปนี้แสดงแผนที่เกณฑ์ตัวกรอง

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

เมื่อใช้กับตัวอย่างข้อมูลยอดขาย เกณฑ์นี้จะแสดงเฉพาะแถวที่ "หมวดหมู่สินค้า" ไม่ใช่ "แผง" และ "วันที่จัดส่ง" อยู่ก่อนวันที่ 30 เมษายน 2016

ตารางที่ 3 ข้อมูลยอดขายโดยใช้เกณฑ์ตัวกรอง
A C D E F G
1 หมวดหมู่รายการ หมายเลขรุ่น ค่าใช้จ่าย จำนวน ภูมิภาค พนักงานขาย วันที่จัดส่ง
2 ตั๋วขึ้นชิงช้าสวรรค์ W-24 $20.50 4 ตะวันตก Beth 1/3/2016
3 ประตู D-01X $15.00 2 ใต้ Amir 15/3/2016
4 กรอบ FR-0B1 $34.00 8 ตะวันออก Hannah 12/3/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")