फ़िल्टर

फ़िल्टर की मदद से, स्प्रेडशीट देखते समय दिखने वाले डेटा को क्रम से लगाया जा सकता है और उसे फ़िल्टर किया जा सकता है. फ़िल्टर, आपकी स्प्रेडशीट में मौजूद डेटा वैल्यू में बदलाव नहीं करते. फ़िल्टर का इस्तेमाल करके, जानकारी को कुछ समय के लिए छिपाया या क्रम से लगाया जा सकता है. फ़िल्टर चालू होने पर, फ़िल्टर के लिए तय की गई शर्तों से मेल खाने वाला डेटा नहीं दिखता. फ़िल्टर व्यू की मदद से, अलग-अलग नामों वाले फ़िल्टर सेव किए जा सकते हैं. साथ ही, जब चाहें तब एक से दूसरे फ़िल्टर पर स्विच किया जा सकता है.

यहां फ़िल्टर इस्तेमाल करने के कुछ उदाहरण दिए गए हैं:

  • किसी कॉलम के हिसाब से डेटा को क्रम से लगाएं. उदाहरण के लिए, उपयोगकर्ता के रिकॉर्ड को नाम के हिसाब से क्रम से लगाएं.
  • किसी खास शर्त को पूरा करने वाले डेटा को छिपाना. उदाहरण के लिए, दो साल से ज़्यादा पुराने सभी रिकॉर्ड छिपाएं.
  • किसी वैल्यू से मेल खाने वाले डेटा को छिपाना. उदाहरण के लिए, "बंद की गई" स्थिति वाली सभी समस्याएं छिपाएं.

सामान्य फ़िल्टर

स्प्रेडशीट के लिए BasicFilter डिफ़ॉल्ट फ़िल्टर होता है. यह फ़िल्टर तब लागू होता है, जब कोई व्यक्ति स्प्रेडशीट देखता है. किसी स्प्रेडशीट की हर शीट में एक बुनियादी फ़िल्टर हो सकता है. बुनियादी फ़िल्टर को बंद करने के लिए, उसे हटाएं. इससे फ़िल्टर और उसकी सभी सेटिंग, स्प्रेडशीट से हट जाती हैं. अगर आपको उसी फ़िल्टर को फिर से चालू करना है, तो आपको शर्तें फिर से सेट करनी होंगी.

बुनियादी फ़िल्टर मैनेज करना

बेसिक फ़िल्टर सेट करने या हटाने के लिए, अनुरोध के सही टाइप के साथ spreadsheets.batchUpdate तरीके का इस्तेमाल करें:

  • बेसिक फ़िल्टर सेट करने के लिए, SetBasicFilterRequest तरीके का इस्तेमाल करें.
  • बेसिक फ़िल्टर हटाने के लिए, ClearBasicFilterRequest तरीके का इस्तेमाल करें.

बेसिक फ़िल्टर की सूची बनाने के लिए, spreadsheets.get तरीके का इस्तेमाल करें और fields यूआरएल पैरामीटर को sheets/basicFilter पर सेट करें. नीचे दिए गए spreadsheets.get कोड के सैंपल में, फ़ील्ड मास्क के साथ Google Sheets का यूआरएल दिखाया गया है:

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

फ़िल्टर व्यू

FilterView एक ऐसा फ़िल्टर होता है जिसे नाम दिया जाता है. इसे अपनी ज़रूरत के हिसाब से चालू और बंद किया जा सकता है. किसी स्प्रेडशीट में कई फ़िल्टर व्यू हो सकते हैं. हालांकि, एक बार में सिर्फ़ एक फ़िल्टर व्यू लागू किया जा सकता है.

यहां फ़िल्टर व्यू के इस्तेमाल के कुछ उदाहरण दिए गए हैं:

  • आपके पास कई अलग-अलग फ़िल्टर हैं. आपको डेटा देखते समय, एक फ़िल्टर से दूसरे फ़िल्टर पर स्विच करना है.
  • आपके पास किसी स्प्रेडशीट में बदलाव करने का ऐक्सेस नहीं है, लेकिन आपको अब भी फ़िल्टर लागू करना है. इस स्थिति में, कुछ समय के लिए इस्तेमाल किया जा सकने वाला एक फ़िल्टर व्यू बनाया जा सकता है. यह सिर्फ़ आपको दिखेगा.
  • आपको अपनी स्प्रेडशीट को शेयर करने वाले हर व्यक्ति को डेटा अलग-अलग तरीके से दिखाना है. स्प्रेडशीट के यूआरएल में spreadsheetId और filterViewId जोड़कर, यह तय किया जा सकता है कि कौनसे फ़िल्टर व्यू लागू करने हैं. इसके लिए, फ़िल्टर व्यू बनाते समय जवाब में मिले filterViewId का इस्तेमाल करें.

    यहां दिए गए कोड सैंपल में, फ़िल्टर व्यू के साथ Google Sheets का यूआरएल दिखाया गया है:

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

फ़िल्टर व्यू मैनेज करना

फ़िल्टर व्यू बनाने, डुप्लीकेट करने, उनमें बदलाव करने या उन्हें मिटाने के लिए, अनुरोध के सही टाइप के साथ spreadsheets.batchUpdate तरीके का इस्तेमाल करें:

  • फ़िल्टर व्यू बनाने के लिए, AddFilterViewRequest तरीके का इस्तेमाल करें.
  • किसी फ़िल्टर व्यू की कॉपी बनाने के लिए, DuplicateFilterViewRequest तरीके का इस्तेमाल करें.
  • फ़िल्टर किए गए व्यू की प्रॉपर्टी में बदलाव करने के लिए, UpdateFilterViewRequest तरीके का इस्तेमाल करें.
  • किसी फ़िल्टर किए गए व्यू को मिटाने के लिए, DeleteFilterViewRequest तरीके का इस्तेमाल करें.

अपने सभी फ़िल्टर किए गए व्यू की सूची बनाने के लिए, spreadsheets.get तरीके का इस्तेमाल करें और fields यूआरएल पैरामीटर को sheets/filterViews पर सेट करें. नीचे दिए गए spreadsheets.get कोड के सैंपल में, फ़ील्ड मास्क के साथ Google Sheets का यूआरएल दिखाया गया है:

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

फ़िल्टर का प्रतिनिधित्व

यहां दिए गए कोड के सैंपल में, FilterView ऑब्जेक्ट के लिए JSON फ़ॉर्मैट दिखाया गया है. BasicFilter ऑब्जेक्ट, पहले वाले ऑब्जेक्ट जैसा ही है. हालांकि, इसमें filterViewId और title फ़ील्ड नहीं हैं. साथ ही, इसमें नाम वाली रेंज का इस्तेमाल नहीं किया जा सकता.

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

डेटा का उदाहरण

इस दस्तावेज़ के बाकी हिस्से में, बिक्री के डेटा की इस टेबल का उदाहरण दिया गया है:

पहली टेबल. बिक्री के डेटा का उदाहरण
A B C D E F G
1 आइटम की कैटगरी मॉडल नंबर लागत मात्रा क्षेत्र सेल्सपर्सन शिप करने की तारीख
2 पहिया W-24 2,050 रुपये 4 पश्चिम बेथ 1/3/2016
3 दरवाज़ा D-01X 15.00 डॉलर 2 दक्षिण अमीर 15/3/2016
4 फ़्रेम FR-0B1 34.00 डॉलर 8 पूर्व हैना 3/12/2016
5 पैनल P-034 INR270 4 उत्तरी Devyn 15/3/2016
6 पैनल P-052 11.50 डॉलर 7 पूर्व एरिक 5/16/2016
7 पहिया W-24 2,050 रुपये 11 दक्षिण Sheldon 4/30/2016
8 इंजन ENG-0161 $330.00 2 उत्तरी Jessie 7/2/2016

स्पेसिफ़िकेशन को क्रम से लगाना

किसी फ़िल्टर में, क्रम से लगाने की कई शर्तें हो सकती हैं. इन स्पेसिफ़िकेशन से यह तय होता है कि डेटा को कैसे क्रम से लगाया जाए. साथ ही, इन्हें तय किए गए क्रम में लागू किया जाता है. SortSpec.dimensionIndex एट्रिब्यूट, कॉलम इंडेक्स के बारे में बताता है. इस इंडेक्स के हिसाब से ही डेटा को क्रम से लगाया जाता है.

यहां दिए गए कोड के सैंपल में, क्रम से लगाने की जानकारी दी गई है:

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

बिक्री के उदाहरण डेटा पर लागू होने पर, इस स्पेसिफ़िकेशन के हिसाब से, डेटा को पहले "मात्रा" के हिसाब से क्रम में लगाया जाता है. इसके बाद, अगर दो लाइनों में मात्रा एक जैसी होती है, तो "शिपिंग की तारीख" के हिसाब से क्रम में लगाया जाता है.

टेबल 2. बिक्री के डेटा को दो कॉलम के हिसाब से क्रम में लगाया गया है
A B C D E F G
1 आइटम की कैटगरी मॉडल नंबर लागत मात्रा क्षेत्र सेल्सपर्सन शिप करने की तारीख
2 दरवाज़ा D-01X 15.00 डॉलर 2 दक्षिण अमीर 15/3/2016
3 इंजन ENG-0161 $330.00 2 उत्तरी Jessie 7/2/2016
4 पहिया W-24 2,050 रुपये 4 पश्चिम बेथ 1/3/2016
5 पैनल P-034 INR270 4 उत्तरी Devyn 15/3/2016
6 पैनल P-052 11.50 डॉलर 7 पूर्व एरिक 5/16/2016
7 फ़्रेम FR-0B1 34.00 डॉलर 8 पूर्व हैना 3/12/2016
8 पहिया W-24 2,050 रुपये 11 दक्षिण Sheldon 4/30/2016

फ़िल्टर करने की शर्तें

FilterCriteria तरीके से यह तय किया जाता है कि बुनियादी फ़िल्टर या फ़िल्टर व्यू में स्प्रेडशीट का कौनसा डेटा दिखाया या छिपाया जाए. हर शर्त, किसी कॉलम में मौजूद वैल्यू पर निर्भर करती है. आपको फ़िल्टर करने की शर्तों को मैप के तौर पर देना होगा. इसमें कुंजियां, कॉलम इंडेक्स होती हैं और वैल्यू, शर्तें होती हैं.

बूलियन condition का इस्तेमाल करके तय की गई शर्तों के लिए, वैल्यू दिखाने के लिए शर्त True होनी चाहिए. यह शर्त, hiddenValues को नहीं बदलती. अगर कोई वैल्यू hiddenValues में शामिल है, तो भी उस वैल्यू से मेल खाने वाले सभी नतीजे छिपे रहेंगे.

यहां फ़िल्टर के मानदंड का मैप दिखाने वाला कोड सैंपल दिया गया है:

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

बिक्री के उदाहरण डेटा पर लागू होने पर, इस शर्त से सिर्फ़ वे लाइनें दिखती हैं जिनमें "आइटम कैटगरी" "पैनल" नहीं है और "शिपिंग की तारीख" 30 अप्रैल, 2016 से पहले की है.

तीसरी टेबल. फ़िल्टर करने की शर्तों का इस्तेमाल करके बिक्री का डेटा
A B C D E F G
1 आइटम की कैटगरी मॉडल नंबर लागत मात्रा क्षेत्र सेल्सपर्सन शिप करने की तारीख
2 पहिया W-24 2,050 रुपये 4 पश्चिम बेथ 1/3/2016
3 दरवाज़ा D-01X 15.00 डॉलर 2 दक्षिण अमीर 15/3/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")