Filtri

I filtri ti consentono di ordinare e filtrare i dati che vedi quando visualizzi un foglio di lavoro. I filtri non modificano i valori dei dati nel foglio di lavoro. Puoi utilizzare i filtri per nascondere o ordinare temporaneamente le informazioni. I dati che corrispondono ai criteri di filtro specificati non vengono visualizzati quando il filtro è attivo. Con le visualizzazioni filtrate, puoi anche salvare diversi filtri con nome e passare da uno all'altro in qualsiasi momento.

Di seguito sono riportati alcuni esempi di casi d'uso per i filtri:

  • Ordinare i dati in base a una determinata colonna. Ad esempio, ordina i record dell'utente per cognome.
  • Nascondi i dati che soddisfano una condizione specifica. Ad esempio, nascondi tutti i record più vecchi di 2 anni.
  • Nascondi i dati che corrispondono a un determinato valore. Ad esempio, nascondi tutti i problemi con lo stato "chiuso".

Filtro di base

BasicFilter per un foglio di lavoro è il filtro predefinito che viene applicato ogni volta che un utente visualizza il foglio di lavoro. Un foglio di lavoro può avere un filtro di base per foglio. Puoi disattivare il filtro di base cancellandolo. Il filtro e tutte le relative impostazioni vengono rimossi dal foglio di lavoro. Per riattivare lo stesso filtro, devi impostare di nuovo i criteri.

Gestire il filtro di base

Per impostare o cancellare il filtro di base, utilizza il metodo spreadsheets.batchUpdate con il tipo di richiesta appropriato:

Per elencare il filtro di base, utilizza il metodo spreadsheets.get e imposta il parametro URL fields su sheets/basicFilter. Il seguente esempio di codice spreadsheets.get mostra un URL di Fogli Google con una maschera di campo:

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

Visualizzazioni filtrate

Un FilterView è un filtro con nome che puoi disattivare e attivare in qualsiasi momento. Un foglio di lavoro può avere più visualizzazioni filtrate, ma puoi applicarne solo una alla volta.

Di seguito sono riportati alcuni esempi di casi d'uso per le visualizzazioni filtrate:

  • Per visualizzare i dati puoi scegliere tra diversi filtri.
  • Non disponi dell'accesso in modifica a un foglio di lavoro, ma vuoi comunque applicare un filtro. In questo caso, puoi creare una visualizzazione filtrata temporanea visibile solo a te.
  • Vuoi che ogni persona con cui condividi il foglio di lavoro visualizzi i dati in modo diverso. Per specificare la visualizzazione filtrata da applicare, fornisci spreadsheetId e filterViewId nell'URL del foglio di lavoro. A questo scopo, utilizza il valore filterViewId restituito nella risposta quando crei la visualizzazione filtrata.

    Il seguente esempio di codice mostra un URL di Fogli Google con una visualizzazione filtrata:

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

Gestire le visualizzazioni filtrate

Per creare, duplicare, modificare o eliminare le visualizzazioni filtrate, utilizza il metodo spreadsheets.batchUpdate con il tipo di richiesta appropriato:

Per elencare tutte le visualizzazioni filtrate, utilizza il metodo spreadsheets.get e imposta il parametro URL fields su sheets/filterViews. Il seguente esempio di codice spreadsheets.get mostra un URL di Fogli Google con una maschera di campo:

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

Rappresentazione del filtro

Il seguente esempio di codice mostra la rappresentazione JSON per un oggetto FilterView. L'oggetto BasicFilter è lo stesso, ma non dispone dei campi filterViewId e title e non può utilizzare un intervallo denominato.

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

Dati di esempio

Il resto di questo documento fa riferimento alla seguente tabella di dati sulle vendite di esempio:

Tabella 1. Esempi di dati di vendita
A B C D E F G
1 Categoria elemento Numero modello Costo Quantità Regione Commerciale Data di spedizione
2 Ruota W-24 20,50 € 4 Occidentale Bea 1/03/2016
3 Porta D-01X 15,00 € 2 Meridionale Amir 15/03/2016
4 Frame FR-0B1 34,00 $ 8 Orientale Anna 12/03/2016
5 Riquadro P-034 6,00 $ 4 Nord Devyn 15/03/2016
6 Riquadro P-052 11,50 $ 7 Orientale Erik 16/05/2016
7 Ruota W-24 20,50 € 11 Meridionale Sheldon 30/04/2016
8 Engine ENG-0161 330,00 $ 2 Nord Jessica 2/07/2016

Ordina specifiche

Un filtro può avere più specifiche di ordinamento. Queste specifiche determinano la modalità di ordinamento dei dati e vengono applicate nell'ordine specificato. L'attributo SortSpec.dimensionIndex specifica l'indice della colonna a cui deve essere applicato l'ordinamento.

Il seguente esempio di codice mostra una specifica di ordinamento:

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

Quando viene applicata ai dati di vendita di esempio, questa specifica ordina prima per "Quantità" e poi, se 2 righe hanno la stessa quantità, per "Data di spedizione".

Tabella 2. Dati delle vendite ordinati in base a 2 colonne
A B C D E F G
1 Categoria elemento Numero modello Costo Quantità Regione Commerciale Data di spedizione
2 Porta D-01X 15,00 € 2 Meridionale Amir 15/03/2016
3 Engine ENG-0161 330,00 $ 2 Nord Jessica 2/07/2016
4 Ruota W-24 20,50 € 4 Occidentale Bea 1/03/2016
5 Riquadro P-034 6,00 $ 4 Nord Devyn 15/03/2016
6 Riquadro P-052 11,50 $ 7 Orientale Erik 16/05/2016
7 Frame FR-0B1 34,00 $ 8 Orientale Anna 12/03/2016
8 Ruota W-24 20,50 € 11 Meridionale Sheldon 30/04/2016

Criteri di filtro

Il metodo FilterCriteria determina quali dati del foglio di lavoro vengono mostrati o nascosti in un filtro di base o in una visualizzazione filtrata. Ogni criterio dipende dai valori di una colonna specifica. I criteri di filtro sono forniti sotto forma di mappa, in cui le chiavi sono gli indici delle colonne e i valori sono i criteri.

Per i criteri specificati utilizzando un valore booleano condition, la condizione deve essere True per poter mostrare i valori. La condizione non esegue l'override di hiddenValues. Se un valore è elencato sotto hiddenValues, tutte le corrispondenze relative a un valore sono comunque nascoste.

Il seguente esempio di codice mostra una mappa dei criteri di filtro:

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

Quando viene applicato ai dati di vendita di esempio, questo criterio mostra solo le righe in cui "Categoria articolo" non è "Riquadro" e dove la "Data di spedizione" è precedente al 30 aprile 2016.

Tabella 3. Dati di vendita con criteri di filtro
A B C D E F G
1 Categoria elemento Numero modello Costo Quantità Regione Commerciale Data di spedizione
2 Ruota W-24 20,50 € 4 Occidentale Bea 1/03/2016
3 Porta D-01X 15,00 € 2 Meridionale Amir 15/03/2016
4 Frame FR-0B1 34,00 $ 8 Orientale Anna 12/03/2016

Esempio

Il seguente esempio di codice mostra come creare una visualizzazione filtrata, duplicarla e quindi aggiornare la versione duplicata utilizzando i dati di vendita di esempio sopra riportati.

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