מסננים

מסננים מאפשרים למיין ולסנן את הנתונים שמוצגים כשמציגים גיליון אלקטרוני. מסננים לא משנים את ערכי הנתונים בגיליון האלקטרוני. אפשר להשתמש במסננים כדי להסתיר או למיין מידע באופן זמני. נתונים שתואמים לקריטריונים לסינון שצוינו לא יופיעו כשהמסנן פועל. בעזרת תצוגות מסנן אפשר גם לשמור מסננים בעלי שם שונים ולעבור ביניהם מתי שרוצים.

ריכזנו כאן כמה תרחישים לדוגמה לשימוש במסננים:

  • למיין נתונים לפי עמודה מסוימת. לדוגמה, אפשר למיין את רשומות המשתמשים לפי שם משפחה.
  • הסתרת נתונים שעומדים בתנאי מסוים. לדוגמה, אפשר להסתיר את כל הרשומות מלפני יותר משנתיים.
  • הסתרת נתונים שתואמים לערך מסוים. לדוגמה, הסתרה של כל הבעיות עם הסטטוס 'סגור'.

מסנן בסיסי

הסמל BasicFilter של גיליון אלקטרוני הוא מסנן ברירת המחדל, שמופעל בכל פעם שמשתמש צופה בגיליון האלקטרוני. בגיליון אלקטרוני יכול להיות מסנן בסיסי אחד לכל גיליון. ניתן לכבות את המסנן הבסיסי על ידי ניקוי שלו. פעולה זו תסיר את המסנן ואת כל ההגדרות שלו מהגיליון האלקטרוני. אם רוצים להפעיל שוב את אותו מסנן, צריך להגדיר שוב את הקריטריונים.

ניהול המסנן הבסיסי

כדי להגדיר או להסיר את המסנן הבסיסי, משתמשים ב-method spreadsheets.batchUpdate עם סוג הבקשה המתאים:

על מנת להציג את המסנן הבסיסי, יש להשתמש בשיטה spreadsheets.get ולהגדיר את הפרמטר fields של כתובת האתר ל-sheets/basicFilter. דוגמת הקוד הבאה spreadsheets.get מציגה כתובת URL של Google Sheets עם מסכת שדות:

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

תצוגות מסנן

FilterView הוא מסנן בעל שם שאפשר להשבית ולהפעיל בכל שלב. בגיליון אלקטרוני יכולות להיות כמה תצוגות סינון, אבל אפשר להחיל רק תצוגה אחת בכל פעם.

ריכזנו כאן כמה תרחישים לדוגמה לשימוש בתצוגות סינון:

  • יש כמה מסננים שונים שאתם רוצים לעבור ביניהם בזמן הצגת הנתונים.
  • אין לכם גישת עריכה לגיליון אלקטרוני אבל אתם עדיין רוצים להחיל מסנן. במקרה כזה, תוכלו ליצור תצוגת מסנן זמנית שתהיה גלויה רק לכם.
  • אתם רוצים שכל אדם שאיתו משתפים את הגיליון האלקטרוני יראה את הנתונים באופן שונה. על מנת לציין את תצוגת הסינון שרוצים להחיל, עליכם לספק את הערכים spreadsheetId ו-filterViewId בכתובת ה-URL של הגיליון האלקטרוני. כדי לעשות זאת, צריך להשתמש בערך filterViewId שהוחזר בתגובה כשיוצרים את תצוגת המסנן.

    דוגמת הקוד הבאה מציגה כתובת URL של Google Sheets עם תצוגת מסנן:

    https://docs.google.com/spreadsheets/d/SPREADSHEET_ID/edit#gid=0&fvid=FILTER_VIEW_ID

ניהול תצוגות מסנן

כדי ליצור, לשכפל, לשנות או למחוק תצוגות סינון, משתמשים בשיטה spreadsheets.batchUpdate עם סוג הבקשה המתאים:

על מנת להציג רשימה של כל תצוגות הסינון משתמשים בשיטה spreadsheets.get ומגדירים את הפרמטר fields של כתובת ה-URL ל-sheets/filterViews. דוגמת הקוד הבאה spreadsheets.get מציגה כתובת URL של Google Sheets עם מסכת שדות:

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 B C D ה. F G
1 Item Category מספר הדגם עלות כמות אזור אנשי מכירות תאריך משלוח
2 גלגל ענק W-24 82 ש"ח 4 מערב בת' 01.03.2016
3 דלת D-01X $15.00 2 דרום אמיר 15.03.2016
4 מסגרת FR-0B1 34.00$ 8 מזרח חנה 12.03.2016
5 חלונית P-034 24.00 ש"ח 4 צפון דווין 15.03.2016
6 חלונית P-052 46.00 ש"ח 7 מזרח אריק 16.05.2016
7 גלגל ענק W-24 82 ש"ח 11 דרום Sheldon 30.04.2016
8 מנוע ENG-0161 $330.00 2 צפון גלי 02.07.2016

מפרט למיון

למסנן יכולים להיות כמה מפרטי מיון. המפרטים האלה קובעים איך למיין את הנתונים ומחילים אותם בסדר שצוין. המאפיין SortSpec.dimensionIndex מציין את אינדקס העמודה שעליו רוצים למיין.

דוגמת הקוד הבאה מציגה מפרט מיון:

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

כשמחילים אותו על נתוני מכירות לדוגמה, המפרט הזה ממוין לפי "כמות" תחילה, ולאחר מכן, אם בשתי שורות יש כמות זהה, לפי "תאריך המשלוח".

טבלה 2. נתוני מכירות ממוינים לפי 2 עמודות
A B C D ה. F G
1 Item Category מספר הדגם עלות כמות אזור אנשי מכירות תאריך משלוח
2 דלת D-01X $15.00 2 דרום אמיר 15.03.2016
3 מנוע ENG-0161 $330.00 2 צפון גלי 02.07.2016
4 גלגל ענק W-24 82 ש"ח 4 מערב בת' 01.03.2016
5 חלונית P-034 24.00 ש"ח 4 צפון דווין 15.03.2016
6 חלונית P-052 46.00 ש"ח 7 מזרח אריק 16.05.2016
7 מסגרת FR-0B1 34.00$ 8 מזרח חנה 12.03.2016
8 גלגל ענק W-24 82 ש"ח 11 דרום Sheldon 30.04.2016

קריטריונים לסינון

השיטה FilterCriteria קובעת אילו נתונים של גיליון אלקטרוני יוצגו או יוסתרו במסנן בסיסי או בתצוגת הסינון. כל קריטריון תלוי בערכים בעמודה ספציפית. מספקים את הקריטריונים לסינון כמפה שבה המפתחות הם האינדקסים של העמודות, והערכים הם הקריטריונים.

בקריטריונים שצוינו באמצעות condition בוליאני, התנאי חייב להיות True כדי שהערכים יוצגו. התנאי לא מבטל את hiddenValues. אם הערך מופיע מתחת ל-hiddenValues, כל ההתאמות לאותו ערך עדיין יהיו מוסתרות.

דוגמת הקוד הבאה מציגה מפת קריטריונים של סינון:

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

כשמחילים אותו על נתוני מכירות לדוגמה, הצגת הקריטריונים תציג רק שורות שבהן "Item Category" אינה "Panel", כאשר "Ship Date" (תאריך משלוח) הוא לפני 30 באפריל 2016.

טבלה 3. נתוני מכירות לפי קריטריוני סינון
A B C D ה. F G
1 Item Category מספר הדגם עלות כמות אזור אנשי מכירות תאריך משלוח
2 גלגל ענק W-24 82 ש"ח 4 מערב בת' 01.03.2016
3 דלת D-01X $15.00 2 דרום אמיר 15.03.2016
4 מסגרת FR-0B1 34.00$ 8 מזרח חנה 12.03.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")