מסננים

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

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

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

מסנן בסיסי

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

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

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

כדי להציג את המסנן הבסיסי, משתמשים ב-method‏ spreadsheets.get ומגדירים את הפרמטר fields של כתובת ה-URL כ-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

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

כדי ליצור, לשכפל, לשנות או למחוק תצוגות מסנן, משתמשים ב-method‏ 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 E F G
1 קטגוריית פריט מספר הדגם עלות כמות אזור אנשי מכירות תאריך משלוח
2 גלגל ענק W-24 20.50$‎ 4 מערב Beth 1.3.2016
3 דלת D-01X 15$ 2 דרום אמיר 15/03/2016
4 מסגרת FR-0B1 34.00$ 8 מזרח חנה 3/12/2016
5 חלונית P-034 24.00 ש"ח 4 צפון Devyn 15/03/2016
6 חלונית P-052 11.50$‎ 7 מזרח אריק 16/05/2016
7 גלגל ענק W-24 20.50$‎ 11 דרום Sheldon 30/04/2016
8 מנוע ENG-0161 330.00$‎ 2 צפון ג'סי 2/7/2016

מיון המפרטים

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

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

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

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

טבלה 2. נתוני מכירות שממוינים לפי 2 עמודות
A B C D E F G
1 קטגוריית פריט מספר הדגם עלות כמות אזור אנשי מכירות תאריך משלוח
2 דלת D-01X 15$ 2 דרום אמיר 15/03/2016
3 מנוע ENG-0161 330.00$‎ 2 צפון ג'סי 2/7/2016
4 גלגל ענק W-24 20.50$‎ 4 מערב Beth 1.3.2016
5 חלונית P-034 24.00 ש"ח 4 צפון Devyn 15/03/2016
6 חלונית P-052 11.50$‎ 7 מזרח אריק 16/05/2016
7 מסגרת FR-0B1 34.00$ 8 מזרח חנה 3/12/2016
8 גלגל ענק W-24 20.50$‎ 11 דרום Sheldon 30/04/2016

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

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

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

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

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

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

טבלה 3. נתוני מכירות לפי קריטריונים לסינון
A B C D E F G
1 קטגוריית פריט מספר הדגם עלות כמות אזור אנשי מכירות תאריך משלוח
2 גלגל ענק W-24 20.50$‎ 4 מערב Beth 1.3.2016
3 דלת D-01X 15$ 2 דרום אמיר 15/03/2016
4 מסגרת FR-0B1 34.00$ 8 מזרח חנה 3/12/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")