Filtros

Los filtros te permiten ordenar y filtrar los datos que ves cuando ves una hoja de cálculo. Los filtros no cambian los valores de los datos de la hoja de cálculo. Puedes usar filtros para ocultar o ordenar la información de manera temporal. Los datos que coinciden con los criterios de filtro especificados no aparecen mientras el filtro está activado. Con las vistas de filtros, también puedes guardar diferentes filtros con nombre y alternar entre ellos cuando lo desees.

A continuación, se incluyen algunos ejemplos de casos de uso de filtros:

  • Ordenar los datos según una columna en particular Por ejemplo, ordena los registros de usuarios por apellido.
  • Oculta los datos que cumplan con una condición específica. Por ejemplo, oculta todos los registros de más de 2 años.
  • Ocultar datos que coincidan con un valor determinado. Por ejemplo, oculta todos los problemas con el estado “cerrado”.

Filtro básico

El BasicFilter de una hoja de cálculo es el filtro predeterminado que se aplica cada vez que alguien ve la hoja de cálculo. Una hoja de cálculo puede tener un filtro básico por hoja. Puedes borrar el filtro básico. Esto quitará el filtro y todos sus parámetros de configuración de la hoja de cálculo. Si deseas volver a activar el mismo filtro, debes volver a establecer los criterios.

Administrar el filtro básico

Para establecer o borrar el filtro básico, usa el método spreadsheets.batchUpdate con el tipo de solicitud adecuado:

Para mostrar el filtro básico, usa el método spreadsheets.get y establece el parámetro de URL fields en sheets/basicFilter. En la siguiente muestra de código spreadsheets.get, se ve una URL de Hojas de cálculo de Google con una máscara de campo:

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

Vistas de filtro

Un objeto FilterView es un filtro con nombre que puedes activar y desactivar en cualquier momento. Una hoja de cálculo puede tener varias vistas de filtro, pero solo puedes aplicar una a la vez.

A continuación, se incluyen algunos ejemplos de casos de uso para vistas de filtro:

  • Tienes varios filtros diferentes que deseas alternar cuando visualizas los datos.
  • No tienes acceso de edición a una hoja de cálculo, pero igualmente quieres aplicar un filtro. En este caso, puedes crear una vista de filtro temporal que solo tú puedas ver.
  • Lo ideal es que cada persona con la que compartas tu hoja de cálculo vea los datos de manera diferente. Puedes especificar la vista de filtro que deseas aplicar; para ello, proporciona spreadsheetId y filterViewId en la URL de la hoja de cálculo. Para hacerlo, usa el filterViewId que se muestra en la respuesta cuando creas la vista de filtro.

    En la siguiente muestra de código, se ve una URL de Hojas de cálculo de Google con una vista de filtro:

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

Administrar vistas de filtro

Para crear, duplicar, modificar o borrar vistas de filtro, usa el método spreadsheets.batchUpdate con el tipo de solicitud adecuado:

Para enumerar todas las vistas de filtro, usa el método spreadsheets.get y establece el parámetro de URL fields en sheets/filterViews. En la siguiente muestra de código spreadsheets.get, se ve una URL de Hojas de cálculo de Google con una máscara de campo:

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

Representación de filtro

En la siguiente muestra de código, se ve la representación JSON de un objeto FilterView. El objeto BasicFilter es el mismo, excepto que carece de los campos filterViewId y title, y no puede usar un rango con nombre.

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

Datos de ejemplo

El resto de este documento hace referencia a la tabla de datos de ventas de ejemplo que aparece a continuación:

Tabla 1. Ejemplos de datos de ventas
A B C D E F. G
1 Item Category Número de modelo Costo Cantidad Región Vendedor Fecha de envío
2 Rueda de la fortuna W-24 USD 20.50 4 Oeste Betina 1/3/2016
3 Puerta D‐01X USD 15.00 2 Sur Antonio 15/3/2016
4 Marco FR-0B1 USD 34.00 8 Este Hannah 12/3/2016
5 Panel P-034 USD 6.00 4 Norte Devyn 15/3/2016
6 Panel P-052 USD 11.50 7 Este Erik 16/5/2016
7 Rueda de la fortuna W-24 USD 20.50 11 Sur Sheldon 30/4/2016
8 Motor ENG-0161 USD 330.00 2 Norte Javiera 2/7/2016

Ordenar especificaciones

Un filtro puede tener varias especificaciones de orden. Estas especificaciones determinan cómo ordenar los datos y se aplican en el orden especificado. El atributo SortSpec.dimensionIndex especifica el índice de columna al que se debe aplicar el orden.

En la siguiente muestra de código, se muestra una especificación de ordenamiento:

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

Cuando se aplica a los datos de ventas de ejemplo, esta especificación se ordena por "Cantidad" primero y luego, si 2 filas tienen la misma cantidad, por "Fecha de envío".

Tabla 2. Los datos de ventas están ordenados por 2 columnas
A B C D E F. G
1 Item Category Número de modelo Costo Cantidad Región Vendedor Fecha de envío
2 Puerta D‐01X USD 15.00 2 Sur Antonio 15/3/2016
3 Motor ENG-0161 USD 330.00 2 Norte Javiera 2/7/2016
4 Rueda de la fortuna W-24 USD 20.50 4 Oeste Betina 1/3/2016
5 Panel P-034 USD 6.00 4 Norte Devyn 15/3/2016
6 Panel P-052 USD 11.50 7 Este Erik 16/5/2016
7 Marco FR-0B1 USD 34.00 8 Este Hannah 12/3/2016
8 Rueda de la fortuna W-24 USD 20.50 11 Sur Sheldon 30/4/2016

Criterios de filtro

El método FilterCriteria determina qué datos de la hoja de cálculo se muestran o se ocultan en un filtro básico o en una vista de filtro. Cada criterio depende de los valores de una columna específica. Proporcionas los criterios de filtro como un mapa en el que las claves son los índices de columna y los valores son los criterios.

En los criterios que se especifican con un valor booleano condition, la condición debe ser True para que se muestren los valores. La condición no anula hiddenValues. Si un valor aparece en hiddenValues, todas las coincidencias de ese valor permanecen ocultas.

En la siguiente muestra de código, se ve un mapa de criterios de filtro:

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

Cuando se aplica a los ejemplos de datos de ventas, este criterio solo muestra filas en las que la "Categoría de artículo" no es "Panel" y en las que la "Fecha de envío" es anterior al 30 de abril de 2016.

Tabla 3. Datos de ventas usando criterios de filtro
A B C D E F. G
1 Item Category Número de modelo Costo Cantidad Región Vendedor Fecha de envío
2 Rueda de la fortuna W-24 USD 20.50 4 Oeste Betina 1/3/2016
3 Puerta D‐01X USD 15.00 2 Sur Antonio 15/3/2016
4 Marco FR-0B1 USD 34.00 8 Este Hannah 12/3/2016

Ejemplo

En la siguiente muestra de código, se indica cómo crear una vista de filtro, duplicarla y, luego, actualizar la versión duplicada con los ejemplos de datos de ventas anteriores.

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