ตัวกรอง

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

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

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

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

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

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

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

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

หากต้องการแสดงตัวกรองพื้นฐาน ให้ใช้เมธอด spreadsheets.get และตั้งค่าพารามิเตอร์ fields ของ URL เป็น 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")