Filtres

Les filtres vous permettent de trier et de filtrer les données que vous voyez lorsque vous affichez une feuille de calcul. Les filtres ne modifient pas les valeurs des données de votre feuille de calcul. Vous pouvez utiliser des filtres pour masquer ou trier temporairement des informations. Les données qui correspondent aux critères de filtre spécifiés n'apparaissent pas lorsque le filtre est activé. Les vues filtrées vous permettent également d'enregistrer différents filtres nommés et de passer de l'un à l'autre à tout moment.

Voici quelques exemples d'utilisation des filtres:

  • Triez les données selon une colonne spécifique. Par exemple, vous pouvez trier les enregistrements utilisateur par nom.
  • Masquez les données qui remplissent une condition spécifique. Par exemple, masquez tous les enregistrements de plus de 2 ans.
  • Masquez les données correspondant à une certaine valeur. Par exemple, masquez tous les problèmes dont l'état est "fermé".

Filtre de base

La BasicFilter d'une feuille de calcul est le filtre par défaut appliqué chaque fois qu'un utilisateur consulte la feuille de calcul. Une feuille de calcul peut comporter un filtre de base par feuille. Vous pouvez désactiver le filtre de base en l'effaçant. Le filtre et tous ses paramètres sont alors supprimés de la feuille de calcul. Si vous voulez le réactiver, vous devez définir de nouveau les critères.

Gérer le filtre de base

Pour définir ou effacer le filtre de base, utilisez la méthode spreadsheets.batchUpdate avec le type de requête approprié:

Pour répertorier le filtre de base, utilisez la méthode spreadsheets.get et définissez le paramètre d'URL fields sur sheets/basicFilter. L'exemple de code spreadsheets.get suivant montre une URL Google Sheets avec un masque de champ:

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

Vues filtrées

Un FilterView est un filtre nommé que vous pouvez désactiver et activer à tout moment. Une feuille de calcul peut comporter plusieurs vues filtrées, mais vous ne pouvez en appliquer qu'une à la fois.

Voici quelques exemples de cas d'utilisation des vues filtrées:

  • Lorsque vous affichez les données, vous devez basculer entre plusieurs filtres différents.
  • Vous n'êtes pas autorisé à modifier une feuille de calcul, mais vous souhaitez tout de même appliquer un filtre. Dans ce cas, vous pouvez créer une vue filtrée temporaire qui n'est visible que par vous.
  • Vous souhaitez que chaque personne avec qui vous partagez votre feuille de calcul visualise les données différemment. Vous pouvez spécifier la vue filtrée que vous souhaitez appliquer en indiquant spreadsheetId et filterViewId dans l'URL de la feuille de calcul. Pour ce faire, utilisez le filterViewId renvoyé dans la réponse lorsque vous créez la vue filtrée.

    L'exemple de code suivant montre une URL Google Sheets avec une vue filtrée:

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

Gérer les vues filtrées

Pour créer, dupliquer, modifier ou supprimer des vues filtrées, utilisez la méthode spreadsheets.batchUpdate avec le type de requête approprié:

Pour répertorier toutes vos vues filtrées, utilisez la méthode spreadsheets.get et définissez le paramètre d'URL fields sur sheets/filterViews. L'exemple de code spreadsheets.get suivant montre une URL Google Sheets avec un masque de champ:

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

Représentation du filtre

L'exemple de code suivant montre la représentation JSON d'un objet FilterView. L'objet BasicFilter est identique, sauf qu'il ne comporte pas les champs filterViewId et title, et qu'il ne peut pas utiliser de plage nommée.

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

Exemple de données

Le reste de ce document fait référence à l’exemple de tableau de données de ventes ci-dessous:

Tableau 1. Exemples de données sur les ventes
A B C D E F G
1 Catégorie de l'élément Numéro de modèle Coût Quantité Région Commercial Date d'expédition
2 Roue W-24 20,50 $ 4 Ouest Beth 01/03/2016
3 Porte D-01X 15 $ 2 Sud Amir 15/03/2016
4 Cadre FR-0B1 34,00 $ 8 Est Anna 12/03/2016
5 Panneau P-034 6 $ 4 Nord Devyn 15/03/2016
6 Panneau P-052 11,50 $ 7 Est Erik 16/05/2016
7 Roue W-24 20,50 $ 11 Sud Sheldon 30/04/2016
8 Moteur ENG-0161 330,00 $ 2 Nord Jessica 02/07/2016

Trier les spécifications

Un filtre peut avoir plusieurs spécifications de tri. Ces spécifications déterminent comment trier les données et sont appliquées dans l'ordre spécifié. L'attribut SortSpec.dimensionIndex spécifie l'index de colonne auquel le tri doit être appliqué.

L'exemple de code suivant montre une spécification de tri:

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

Lorsqu'elle est appliquée aux exemples de données de vente, cette spécification trie d'abord par "Quantité", puis par "Date d'expédition" si deux lignes ont la même quantité.

Tableau 2. Données sur les ventes triées selon deux colonnes
A B C D E F G
1 Catégorie de l'élément Numéro de modèle Coût Quantité Région Commercial Date d'expédition
2 Porte D-01X 15 $ 2 Sud Amir 15/03/2016
3 Moteur ENG-0161 330,00 $ 2 Nord Jessica 02/07/2016
4 Roue W-24 20,50 $ 4 Ouest Beth 01/03/2016
5 Panneau P-034 6 $ 4 Nord Devyn 15/03/2016
6 Panneau P-052 11,50 $ 7 Est Erik 16/05/2016
7 Cadre FR-0B1 34,00 $ 8 Est Anna 12/03/2016
8 Roue W-24 20,50 $ 11 Sud Sheldon 30/04/2016

Critères de filtre

La méthode FilterCriteria détermine quelles données de la feuille de calcul sont affichées ou masquées dans un filtre ou une vue filtrée de base. Chaque critère dépend des valeurs d'une colonne spécifique. Vous fournissez les critères de filtre sous forme de carte, où les clés sont les index de colonne et les valeurs les critères.

Pour les critères spécifiés à l'aide d'une valeur booléenne condition, la condition doit être True pour que les valeurs soient affichées. La condition ne remplace pas hiddenValues. Si une valeur est répertoriée sous hiddenValues, toutes les correspondances d'une valeur sont toujours masquées.

L'exemple de code suivant montre un mappage de critères de filtre:

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

Lorsqu'il est appliqué aux exemples de données de vente, ce critère n'affiche que les lignes où la catégorie de l'article n'est pas "Panneau" et où la date d'expédition est antérieure au 30 avril 2016.

Tableau 3. Données sur les ventes utilisant les critères de filtre
A B C D E F G
1 Catégorie de l'élément Numéro de modèle Coût Quantité Région Commercial Date d'expédition
2 Roue W-24 20,50 $ 4 Ouest Beth 01/03/2016
3 Porte D-01X 15 $ 2 Sud Amir 15/03/2016
4 Cadre FR-0B1 34,00 $ 8 Est Anna 12/03/2016

Échantillon

L'exemple de code suivant montre comment créer une vue filtrée, la dupliquer, puis mettre à jour la version dupliquée à l'aide des exemples de données de ventes ci-dessus.

Python

sheets/extraits/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")