ฟิลเตอร์

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

ตัวอย่างกรณีการใช้งานสำหรับตัวกรองมีดังนี้

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

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

BasicFilter สำหรับสเปรดชีตคือตัวกรองเริ่มต้น ซึ่งจะมีผลทุกครั้งที่ผู้ใช้ดูสเปรดชีต สเปรดชีต 1 แผ่นจะมีตัวกรองพื้นฐานได้ 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 ตัวอย่างข้อมูลการขาย
B C D จ. F G
1 Item Category หมายเลขรุ่น ค่าใช้จ่าย จำนวน ภูมิภาค พนักงานขาย วันที่จัดส่ง
2 ตั๋วขึ้นชิงช้าสวรรค์ W-24 205.00 THB 4 ตะวันตก เบธ 1/3/2016
3 ประตู D-01X 450 บาท 2 ใต้ อาเมียร์ 15/3/2016
4 กรอบ ฝรั่งเศส-0ข1 340.00 THB 8 ตะวันออก วรรณา 12/3/2016
5 แผง P-034 $6.00 4 เหนือ เดวิน 15/3/2016
6 แผง P-052 335 บาท 7 ตะวันออก อิริค 16/5/2016
7 ตั๋วขึ้นชิงช้าสวรรค์ W-24 205.00 THB 11 ใต้ เชลดอน 30/4/2016
8 เครื่องยนต์ ENG-0161 330.00 บาท 2 เหนือ เจสซี่ 2/7/2016

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

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

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

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

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

ตารางที่ 2 ข้อมูลยอดขายจัดเรียงตาม 2 คอลัมน์
B C D จ. F G
1 Item Category หมายเลขรุ่น ค่าใช้จ่าย จำนวน ภูมิภาค พนักงานขาย วันที่จัดส่ง
2 ประตู D-01X 450 บาท 2 ใต้ อาเมียร์ 15/3/2016
3 เครื่องยนต์ ENG-0161 330.00 บาท 2 เหนือ เจสซี่ 2/7/2016
4 ตั๋วขึ้นชิงช้าสวรรค์ W-24 205.00 THB 4 ตะวันตก เบธ 1/3/2016
5 แผง P-034 $6.00 4 เหนือ เดวิน 15/3/2016
6 แผง P-052 335 บาท 7 ตะวันออก อิริค 16/5/2016
7 กรอบ ฝรั่งเศส-0ข1 340.00 THB 8 ตะวันออก วรรณา 12/3/2016
8 ตั๋วขึ้นชิงช้าสวรรค์ W-24 205.00 THB 11 ใต้ เชลดอน 30/4/2016

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

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

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

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

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

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

ตารางที่ 3 ข้อมูลการขายโดยใช้เกณฑ์ตัวกรอง
B C D จ. F G
1 Item Category หมายเลขรุ่น ค่าใช้จ่าย จำนวน ภูมิภาค พนักงานขาย วันที่จัดส่ง
2 ตั๋วขึ้นชิงช้าสวรรค์ W-24 205.00 THB 4 ตะวันตก เบธ 1/3/2016
3 ประตู D-01X 450 บาท 2 ใต้ อาเมียร์ 15/3/2016
4 กรอบ ฝรั่งเศส-0ข1 340.00 THB 8 ตะวันออก วรรณา 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")