Filtrelerle veri görünürlüğünü yönetme

Bu belgede, e-tabloda gösterilen verileri sıralamak ve filtrelemek için filtreleri kullanma hakkında bilgi verilmektedir.

Filtreler, bir e-tabloyu görüntülerken gördüğünüz verileri sıralamanıza ve filtrelemenize olanak tanır. Filtreler, e-tablonuzdaki veri değerlerini değiştirmez. Bilgileri geçici olarak gizlemek veya sıralamak için filtreleri kullanabilirsiniz. Belirtilen filtre ölçütleriyle eşleşen veriler, filtre etkinken görünmez. Filtre görünümleri ile farklı adlandırılmış filtreleri kaydedebilir ve istediğiniz zaman bunlar arasında geçiş yapabilirsiniz.

Google E-Tablolar API isteğinde döndürülen verileri filtrelemek için DataFilter nesnesini kullanın. Daha fazla bilgi için Meta verileri okuma, yazma ve arama konusuna bakın.

Kullanım alanlarını filtreleme

Aşağıda, filtrelerin kullanım alanlarına ilişkin bazı örnekler verilmiştir:

  • Verileri belirli bir sütuna göre sıralayın. Örneğin, kullanıcı kayıtlarını soyadına göre sıralayın.
  • Belirli bir koşulu karşılayan verileri gizleme Örneğin, iki yıldan eski tüm kayıtları gizleyebilirsiniz.
  • Belirli bir değerle eşleşen verileri gizleme. Örneğin, durumu "kapalı" olan tüm sorunları gizleyin.

Temel filtre

E-tablo için BasicFilter nesnesi, e-tabloyu görüntüleyen herkes için uygulanan varsayılan filtredir. Bir e-tabloda sayfa başına yalnızca bir temel filtre olabilir. Temel filtreyi temizleyerek kapatabilirsiniz. Bu işlem, filtreyi ve tüm ayarlarını elektronik tablodan kaldırır. Aynı filtreyi tekrar etkinleştirmek isterseniz ölçütleri yeniden ayarlamanız gerekir.

Temel filtreyi yönetme

Temel filtreyi ayarlamak veya temizlemek için uygun istek türüyle birlikte spreadsheets.batchUpdate yöntemini kullanın:

Temel filtreyi listelemek için spreadsheets.get yöntemini kullanın ve fields URL parametresini sheets/basicFilter olarak ayarlayın. Aşağıdaki spreadsheets.get kod örneğinde, alan maskesi içeren bir Google E-Tablolar URL'si gösterilmektedir:

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

Filtre görünümleri

A FilterView istediğiniz zaman devre dışı bırakıp etkinleştirebileceğiniz adlandırılmış bir filtredir. Bir sayfada birden fazla filtre görünümü kaydedilebilir ancak aynı anda yalnızca birini uygulayabilirsiniz. Bir sayfada hem temel filtre hem de birden fazla filtre görünümü bulunabilir ancak aynı veri aralığında ikisini de aynı anda uygulayamazsınız.

Filtre görünümü kullanım alanları

Filtre görünümleriyle ilgili bazı örnek kullanım alanları:

  • Verileri görüntülerken aralarında geçiş yapmak istediğiniz birkaç farklı filtreniz var.
  • Bir e-tabloya düzenleme erişiminiz yok ancak yine de filtre uygulamak istiyorsunuz. Bu durumda, yalnızca sizin görebileceğiniz geçici bir filtre görünümü oluşturabilirsiniz.
  • E-tablonuzu paylaştığınız her kişinin verileri farklı şekilde görüntülemesini istiyorsanız. E-tablo URL'sinde spreadsheetId ve filterViewId değerlerini sağlayarak uygulamak istediğiniz filtre görünümünü belirtebilirsiniz. Bunu yapmak için filtre görünümünü oluştururken yanıtta döndürülen filterViewId öğesini kullanın.

    Aşağıdaki kod örneğinde, filtre görünümü içeren bir E-Tablolar URL'si gösterilmektedir:

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

Filtre görünümlerini yönetme

Filtre görünümleri oluşturmak, çoğaltmak, değiştirmek veya silmek için uygun istek türüne sahip spreadsheets.batchUpdate yöntemini kullanın:

Tüm filtre görünümlerinizi listelemek için spreadsheets.get yöntemini kullanın ve fields URL parametresini sheets/filterViews olarak ayarlayın. Aşağıdaki spreadsheets.get kod örneğinde, field_mask içeren bir E-Tablolar URL'si gösterilmektedir:

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

Filtrenin JSON gösterimi

Aşağıdaki kod örneğinde, bir FilterView nesnesinin JSON gösterimi yer almaktadır. BasicFilter nesnesi, filterViewId ve title alanlarının olmaması ve adlandırılmış aralık kullanamaması dışında aynıdır.

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

Örnek satış verileri

Bu belgenin geri kalanında aşağıdaki örnek satış verileri tablosuna referans verilmektedir:

Tablo 1. Örnek satış verileri
A B C D E F G
1 Öğe Kategorisi Model Numarası Maliyet Miktar Bölge Satış görevlisi Kargo Tarihi
2 Tekerlek W-24 20,50 ABD doları 4 Batı Beth 01.03.2016
3 Kapı D-01X 15 TL 2 Güney Amir 15.03.2016
4 Çerçeve FR-0B1 34,00 ABD doları 8 Doğu Hannah 12.03.2016
5 Panel P-034 6,00 ABD doları 4 Kuzey Devyn 15.03.2016
6 Panel P-052 11,50 ABD doları 7 Doğu Erik 16.05.2016
7 Tekerlek W-24 20,50 ABD doları 11 Güney Sheldon 30.04.2016
8 Motor ENG-0161 $330,00 2 Kuzey Jessie 02.07.2016

Sıralama özellikleri

Bir filtrede birden fazla sıralama özelliği olabilir. Bu özellikler, verilerin nasıl sıralanacağını belirler ve belirtilen sırayla uygulanır. SortSpec.dimensionIndex özelliği, sıralamanın uygulanması gereken sütun dizinini belirtir.

Aşağıdaki kod örneğinde bir sıralama belirtimi gösterilmektedir:

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

Bu spesifikasyon, örnek satış verilerine uygulandığında önce "Miktar" sütununa göre sıralama yapar. Ardından, iki satırın miktarı aynıysa "Gönderim Tarihi"ne göre sıralama yapar.

Tablo 2. İki sütuna göre sıralanmış satış verileri
A B C D E F G
1 Öğe Kategorisi Model Numarası Maliyet Miktar Bölge Satış görevlisi Kargo Tarihi
2 Kapı D-01X 15 TL 2 Güney Amir 15.03.2016
3 Motor ENG-0161 $330,00 2 Kuzey Jessie 02.07.2016
4 Tekerlek W-24 20,50 ABD doları 4 Batı Beth 01.03.2016
5 Panel P-034 6,00 ABD doları 4 Kuzey Devyn 15.03.2016
6 Panel P-052 11,50 ABD doları 7 Doğu Erik 16.05.2016
7 Çerçeve FR-0B1 34,00 ABD doları 8 Doğu Hannah 12.03.2016
8 Tekerlek W-24 20,50 ABD doları 11 Güney Sheldon 30.04.2016

Filtre ölçütleri

FilterCriteria nesnesi, temel filtrede veya filtre görünümünde hangi e-tablo verilerinin gösterileceğini ya da gizleneceğini belirler. Her ölçüt, belirli bir sütundaki değerlere bağlıdır. Filtre ölçütlerini, anahtarların sütun dizinleri ve değerlerin ölçütler olduğu bir harita olarak sağlarsınız.

Boole condition kullanılarak belirtilen ölçütler için değerlerin gösterilmesi amacıyla koşul true olmalıdır. Koşul, hiddenValues değerini geçersiz kılmıyor. Bir değer hiddenValues altında listeleniyorsa değerle ilgili tüm eşleşmeler yine gizlenir.

Aşağıdaki kod örneğinde bir filtre ölçütü haritası gösterilmektedir:

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

Bu ölçüt, örnek satış verilerine uygulandığında yalnızca "Öğe Kategorisi" sütun değerinin "Panel" olmadığı ve "Gönderim Tarihi" sütun değerinin "30 Nisan 2016"dan önce olduğu satırları gösterir.

Tablo 3. Filtre ölçütlerini kullanan satış verileri
A B C D E F G
1 Öğe Kategorisi Model Numarası Maliyet Miktar Bölge Satış görevlisi Kargo Tarihi
2 Tekerlek W-24 20,50 ABD doları 4 Batı Beth 01.03.2016
3 Kapı D-01X 15 TL 2 Güney Amir 15.03.2016
4 Çerçeve FR-0B1 34,00 ABD doları 8 Doğu Hannah 12.03.2016

Filtre görünümü kod örneği

Aşağıdaki kod örneğinde, filtre görünümü oluşturma, filtre görünümünü çoğaltma ve ardından örnek satış verilerini kullanarak çoğaltılan sürümü güncelleme işlemleri gösterilmektedir.

Java

sheets/snippets/src/main/java/SheetsFilterViews.java
/*
 * Dependencies (Maven):
 * com.google.apis:google-api-services-sheets:v4-rev20220927-2.0.0
 * com.google.auth:google-auth-library-oauth2-http:1.19.0
 */

import com.google.api.client.googleapis.javanet.GoogleNetHttpTransport;
import com.google.api.client.json.gson.GsonFactory;
import com.google.api.services.sheets.v4.Sheets;
import com.google.api.services.sheets.v4.SheetsScopes;
import com.google.api.services.sheets.v4.model.*;
import com.google.auth.http.HttpCredentialsAdapter;
import com.google.auth.oauth2.GoogleCredentials;

import java.io.IOException;
import java.security.GeneralSecurityException;
import java.util.*;

public class SheetsFilterViews {

    public static void main(String... args) {
        filterViews("1CM29gwKIzeXsAppeNwrc8lbYaVMmUclprLuLYuHog4k");
    }

    public static void filterViews(String spreadsheetId) {
        try {
            // Load pre-authorized user credentials from the environment.
            // TODO(developer) - See https://developers.google.com/identity for guides on implementing OAuth2.
            GoogleCredentials credentials = GoogleCredentials.getApplicationDefault()
                    .createScoped(Collections.singleton(SheetsScopes.SPREADSHEETS));

            Sheets service = new Sheets.Builder(
                    GoogleNetHttpTransport.newTrustedTransport(),
                    GsonFactory.getDefaultInstance(),
                    new HttpCredentialsAdapter(credentials))
                    .setApplicationName("Sheets Filter Views Sample")
                    .build();

            // --- Step 1: Add Filter View ---
            GridRange myRange = new GridRange()
                    .setSheetId(0)
                    .setStartRowIndex(0)
                    .setStartColumnIndex(0);

            // Construct Criteria for Column 0 (Hidden Values)
            FilterCriteria criteria0 = new FilterCriteria()
                    .setHiddenValues(Collections.singletonList("Panel"));

            // Construct Criteria for Column 6 (Date Condition)
            ConditionValue dateValue = new ConditionValue().setUserEnteredValue("4/30/2016");
            BooleanCondition dateCondition = new BooleanCondition()
                    .setType("DATE_BEFORE")
                    .setValues(Collections.singletonList(dateValue));
            FilterCriteria criteria6 = new FilterCriteria().setCondition(dateCondition);

            // Map criteria to column indices (Note: keys are Strings in Java map)
            Map<String, FilterCriteria> criteriaMap = new HashMap<>();
            criteriaMap.put("0", criteria0);
            criteriaMap.put("6", criteria6);

            FilterView filterView = new FilterView()
                    .setTitle("Sample Filter")
                    .setRange(myRange)
                    .setSortSpecs(Collections.singletonList(
                            new SortSpec().setDimensionIndex(3).setSortOrder("DESCENDING")
                    ))
                    .setCriteria(criteriaMap);

            // --- Step 1: Add Filter View ---
            // (Request construction remains the same)
            // ...
            AddFilterViewRequest addFilterViewRequest = new AddFilterViewRequest().setFilter(filterView);

            BatchUpdateSpreadsheetRequest batchRequest1 = new BatchUpdateSpreadsheetRequest()
                    .setRequests(Collections.singletonList(new Request().setAddFilterView(addFilterViewRequest)));

            BatchUpdateSpreadsheetResponse response1 = service.spreadsheets()
                    .batchUpdate(spreadsheetId, batchRequest1)
                    .execute();

            if (response1.getReplies() == null || response1.getReplies().isEmpty()) {
                System.err.println("Error: No replies returned from AddFilterView request.");
                return;
            }

            Response reply1 = response1.getReplies().get(0);
            if (reply1.getAddFilterView() == null || reply1.getAddFilterView().getFilter() == null) {
                 System.err.println("Error: Response did not contain AddFilterView data.");
                 return;
            }

            int filterId = reply1.getAddFilterView().getFilter().getFilterViewId();

            // --- Step 2: Duplicate Filter View ---
            DuplicateFilterViewRequest duplicateRequest = new DuplicateFilterViewRequest()
                    .setFilterId(filterId);

            BatchUpdateSpreadsheetRequest batchRequest2 = new BatchUpdateSpreadsheetRequest()
                    .setRequests(Collections.singletonList(new Request().setDuplicateFilterView(duplicateRequest)));

            BatchUpdateSpreadsheetResponse response2 = service.spreadsheets()
                    .batchUpdate(spreadsheetId, batchRequest2)
                    .execute();

            if (response2.getReplies() == null || response2.getReplies().isEmpty()) {
                 System.err.println("Error: No replies returned from DuplicateFilterView request.");
                 return;
            }

            Response reply2 = response2.getReplies().get(0);
            if (reply2.getDuplicateFilterView() == null || reply2.getDuplicateFilterView().getFilter() == null) {
                System.err.println("Error: Response did not contain DuplicateFilterView data.");
                return;
            }

            int newFilterId = reply2.getDuplicateFilterView().getFilter().getFilterViewId();

            // --- Step 3: Update Filter View ---
            // Extract the new ID from the duplicate response
            int newFilterId = response2.getReplies().get(0)
                    .getDuplicateFilterView().getFilter().getFilterViewId();

            // Create update criteria
            Map<String, FilterCriteria> updateCriteriaMap = new HashMap<>();
            updateCriteriaMap.put("0", new FilterCriteria()); // Empty criteria

            ConditionValue numValue = new ConditionValue().setUserEnteredValue("5");
            BooleanCondition numCondition = new BooleanCondition()
                    .setType("NUMBER_GREATER")
                    .setValues(Collections.singletonList(numValue));
            updateCriteriaMap.put("3", new FilterCriteria().setCondition(numCondition));

            FilterView updateFilterView = new FilterView()
                    .setFilterViewId(newFilterId)
                    .setTitle("Updated Filter")
                    .setCriteria(updateCriteriaMap);

            UpdateFilterViewRequest updateRequest = new UpdateFilterViewRequest()
                    .setFilter(updateFilterView)
                    .setFields("criteria,title");

            BatchUpdateSpreadsheetRequest batchRequest3 = new BatchUpdateSpreadsheetRequest()
                    .setRequests(Collections.singletonList(new Request().setUpdateFilterView(updateRequest)));

            BatchUpdateSpreadsheetResponse response3 = service.spreadsheets()
                    .batchUpdate(spreadsheetId, batchRequest3)
                    .execute();

            System.out.println(response3.toPrettyString());

        } catch (IOException | GeneralSecurityException e) {
            System.err.println("An error occurred: " + e);
        }
    }
}

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")