Formato condicional

La API de Hojas de cálculo de Google te permite crear y actualizar reglas de formato condicional en hojas de cálculo. Solo ciertos tipos de formato (negrita, cursiva, tachado, color de primer plano y color de fondo) se pueden controlar mediante el formato condicional. En los ejemplos de esta página, se muestra cómo realizar operaciones comunes de formato condicional con la API de Hojas de cálculo.

Estos ejemplos se presentan como solicitudes HTTP para que el lenguaje no sea neutral. Para aprender a implementar una actualización por lotes en diferentes lenguajes con las bibliotecas cliente de la API de Google, consulta Cómo actualizar hojas de cálculo.

En estos ejemplos, los marcadores de posición SPREADSHEET_ID y SHEET_ID indican dónde deberías proporcionar esos ID. Puedes encontrar el ID de la hoja de cálculo en la URL de la hoja de cálculo. Para obtener el ID de la hoja, puedes usar el método spreadsheets.get. Los rangos se especifican con la notación A1. Un rango de ejemplo es Sheet1!A1:D5.

Cómo agregar un gradiente de color condicional en una fila

En la siguiente muestra de código del método spreadsheets.batchUpdate, se indica cómo usar AddConditionalFormatRuleRequest para establecer nuevas reglas de formato condicional de gradientes para las filas 10 y 11 de una hoja. La primera regla establece que las celdas en esa fila tienen sus colores de fondo configurados según su valor. El valor más bajo de la fila tiene un color rojo oscuro, mientras que el valor más alto es de color verde brillante. El color de los demás valores se interpola. La segunda regla hace lo mismo, pero con valores numéricos específicos que determinan los extremos del gradiente (y distintos colores). La solicitud usa sheets.InterpolationPointType como type.

El protocolo de solicitud se muestra a continuación.

POST https://sheets.googleapis.com/v4/spreadsheets/SPREADSHEET_ID:batchUpdate
{
  "requests": [
    {
      "addConditionalFormatRule": {
        "rule": {
          "ranges": [
            {
              "sheetId": SHEET_ID,
              "startRowIndex": 9,
              "endRowIndex": 10,
            }
          ],
          "gradientRule": {
            "minpoint": {
              "color": {
                "green": 0.2,
                "red": 0.8
              },
              "type": "MIN"
            },
            "maxpoint": {
              "color": {
                "green": 0.9
              },
              "type": "MAX"
            },
          }
        },
        "index": 0
      }
    },
    {
      "addConditionalFormatRule": {
        "rule": {
          "ranges": [
            {
              "sheetId": SHEET_ID,
              "startRowIndex": 10,
              "endRowIndex": 11,
            }
          ],
          "gradientRule": {
            "minpoint": {
              "color": {
                "green": 0.8,
                "red": 0.8
              },
              "type": "NUMBER",
              "value": "0"
            },
            "maxpoint": {
              "color": {
                "blue": 0.9,
                "green": 0.5,
                "red": 0.5
              },
              "type": "NUMBER",
              "value": "256"
            },
          }
        },
        "index": 1
      }
    },
  ]
}

Después de la solicitud, la regla de formato aplicada actualiza la hoja. Dado que el gradiente de la fila 11 tiene su punto máximo establecido en 256, cualquier valor por encima de él tiene el color de punto máximo:

Resultado de receta para agregar formato de gradiente

Cómo agregar una regla de formato condicional a un conjunto de rangos

En la siguiente muestra de código del método spreadsheets.batchUpdate, se indica cómo usar AddConditionalFormatRuleRequest para establecer una nueva regla de formato condicional para las columnas A y C de una hoja. La regla establece que el color de fondo de las celdas con valores de 10 o menos cambia a rojo oscuro. La regla se inserta en el índice 0, por lo que tiene prioridad sobre otras reglas de formato. La solicitud usa ConditionType como type para el BooleanRule.

El protocolo de solicitud se muestra a continuación.

POST https://sheets.googleapis.com/v4/spreadsheets/SPREADSHEET_ID:batchUpdate
{
  "requests": [
    {
      "addConditionalFormatRule": {
        "rule": {
          "ranges": [
            {
              "sheetId": SHEET_ID,
              "startColumnIndex": 0,
              "endColumnIndex": 1,
            },
            {
              "sheetId": SHEET_ID,
              "startColumnIndex": 2,
              "endColumnIndex": 3,
            },
          ],
          "booleanRule": {
            "condition": {
              "type": "NUMBER_LESS_THAN_EQ",
              "values": [
                {
                  "userEnteredValue": "10"
                }
              ]
            },
            "format": {
              "backgroundColor": {
                "green": 0.2,
                "red": 0.8,
              }
            }
          }
        },
        "index": 0
      }
    }
  ]
}

Después de la solicitud, la regla de formato aplicada actualiza la hoja:

Resultado de receta para agregar formato condicional

Cómo agregar reglas de formato condicional de fecha y texto a un rango

En la siguiente muestra de código del método spreadsheets.batchUpdate, se indica cómo usar AddConditionalFormatRuleRequest para establecer nuevas reglas de formato condicional para el rango A1:D5 en una hoja, según la fecha y los valores de texto de esas celdas. Si el texto contiene la string “Cost” (no distingue mayúsculas de minúsculas), la primera regla establece el texto de la celda en negrita. Si la celda contiene una fecha anterior a la semana pasada, la segunda regla establece el texto de la celda en cursiva y le aplica el color azul. La solicitud usa ConditionType como type para el BooleanRule.

El protocolo de solicitud se muestra a continuación.

POST https://sheets.googleapis.com/v4/spreadsheets/SPREADSHEET_ID:batchUpdate
{
  "requests": [
    {
      "addConditionalFormatRule": {
        "rule": {
          "ranges": [
            {
              "sheetId": SHEET_ID,
              "startRowIndex": 0,
              "endRowIndex": 5,
              "startColumnIndex": 0,
              "endColumnIndex": 4,
            }
          ],
          "booleanRule": {
            "condition": {
              "type": "TEXT_CONTAINS",
              "values": [
                {
                  "userEnteredValue": "Cost"
                }
              ]
            },
            "format": {
              "textFormat": {
                "bold": true
              }
            }
          }
        },
        "index": 0
      }
    },
    {
      "addConditionalFormatRule": {
        "rule": {
          "ranges": [
            {
              "sheetId": SHEET_ID,
              "startRowIndex": 0,
              "endRowIndex": 5,
              "startColumnIndex": 0,
              "endColumnIndex": 4,
            }
          ],
          "booleanRule": {
            "condition": {
              "type": "DATE_BEFORE",
              "values": [
                {
                  "relativeDate": "PAST_WEEK"
                }
              ]
            },
            "format": {
              "textFormat": {
                "italic": true,
                "foregroundColor": {
                  "blue": 1
                }
              }
            }
          }
        },
        "index": 1
      }
    }
  ]
}

Después de la solicitud, la regla de formato aplicada actualiza la hoja. En este ejemplo, la fecha actual es el 26/9/2016:

Resultado de la receta para formato condicional de texto y fecha

Cómo agregar una regla de fórmula personalizada a un rango

En la siguiente muestra de código del método spreadsheets.batchUpdate, se indica cómo usar AddConditionalFormatRuleRequest para establecer una nueva regla de formato condicional para el rango B5:B8 en una hoja según una fórmula personalizada. La regla calcula el producto de la celda en las columnas A y B. Si el producto es mayor que 120, el texto de la celda se establece en negrita y cursiva. La solicitud usa ConditionType como type para el BooleanRule.

El protocolo de solicitud se muestra a continuación.

POST https://sheets.googleapis.com/v4/spreadsheets/SPREADSHEET_ID:batchUpdate
{
  "requests": [
    {
      "addConditionalFormatRule": {
        "rule": {
          "ranges": [
            {
              "sheetId": SHEET_ID,
              "startColumnIndex": 2,
              "endColumnIndex": 3,
              "startRowIndex": 4,
              "endRowIndex": 8
            }
          ],
          "booleanRule": {
            "condition": {
              "type": "CUSTOM_FORMULA",
              "values": [
                {
                  "userEnteredValue": "=GT(A5*B5,120)"
                }
              ]
            },
            "format": {
              "textFormat": {
                "bold": true,
                "italic": true
              }
            }
          }
        },
        "index": 0
      }
    }
  ]
}

Después de la solicitud, la regla de formato aplicada actualiza la hoja:

Resultado de la receta para formato condicional personalizado

Cómo borrar una regla de formato condicional

En la siguiente muestra de código del método spreadsheets.batchUpdate, se indica cómo usar DeleteConditionalFormatRuleRequest para borrar la regla de formato condicional con el índice 0 en la hoja especificada por SHEET_ID.

El protocolo de solicitud se muestra a continuación.

POST https://sheets.googleapis.com/v4/spreadsheets/SPREADSHEET_ID:batchUpdate
{
  "requests": [
    {
      "deleteConditionalFormatRule": {
        "sheetId": SHEET_ID,
        "index": 0
      }
    }
  ]
}

Leer la lista de reglas de formato condicional

En la siguiente muestra de código del método spreadsheets.get, se indica cómo obtener el título, los elementos SHEET_ID y la lista de todas las reglas de formato condicional para cada hoja de una hoja de cálculo. El parámetro de consulta fields determina qué datos mostrar.

El protocolo de solicitud se muestra a continuación.

GET https://sheets.googleapis.com/v4/spreadsheets/SPREADSHEET_ID?fields=sheets(properties(title,sheetId),conditionalFormats)

La respuesta consta de un recurso Spreadsheet, que contiene un array de objetos Sheet, cada uno con un elemento SheetProperties y un array de elementos ConditionalFormatRule. Si un campo de respuesta determinado se establece en el valor predeterminado, se omite de la respuesta. La solicitud usa ConditionType como type para el BooleanRule.

{
  "sheets": [
    {
      "properties": {
        "sheetId": 0,
        "title": "Sheet1"
      },
      "conditionalFormats": [
        {
          "ranges": [
            {
              "startRowIndex": 4,
              "endRowIndex": 8,
              "startColumnIndex": 2,
              "endColumnIndex": 3
            }
          ],
          "booleanRule": {
            "condition": {
              "type": "CUSTOM_FORMULA",
              "values": [
                {
                  "userEnteredValue": "=GT(A5*B5,120)"
                }
              ]
            },
            "format": {
              "textFormat": {
                "bold": true,
                "italic": true
              }
            }
          }
        },
        {
          "ranges": [
            {
              "startRowIndex": 0,
              "endRowIndex": 5,
              "startColumnIndex": 0,
              "endColumnIndex": 4
            }
          ],
          "booleanRule": {
            "condition": {
              "type": "DATE_BEFORE",
              "values": [
                {
                  "relativeDate": "PAST_WEEK"
                }
              ]
            },
            "format": {
              "textFormat": {
                "foregroundColor": {
                  "blue": 1
                },
                "italic": true
              }
            }
          }
        },
        ...
      ]
    }
  ]
}

Cómo actualizar una regla de formato condicional o su prioridad

En la siguiente muestra de código del método spreadsheets.batchUpdate, se indica cómo usar UpdateConditionalFormatRuleRequest con varias solicitudes. La primera solicitud mueve una regla de formato condicional existente a un índice más alto (de 0 a 2, lo que disminuye su prioridad). La segunda solicitud reemplaza la regla de formato condicional en el índice 0 por una regla nueva que formatea las celdas que contienen el texto exacto especificado (“Costo total”) en el rango A1:D5. El traslado de la primera solicitud se completa antes de que comience la segunda, por lo que la segunda solicitud reemplaza la regla que estaba originalmente en el índice 1. La solicitud usa ConditionType como type para el BooleanRule.

El protocolo de solicitud se muestra a continuación.

POST https://sheets.googleapis.com/v4/spreadsheets/SPREADSHEET_ID:batchUpdate
{
  "requests": [
    {
      "updateConditionalFormatRule": {
        "sheetId": SHEET_ID,
        "index": 0,
        "newIndex": 2
      },
      "updateConditionalFormatRule": {
        "sheetId": SHEET_ID,
        "index": 0,
        "rule": {
          "ranges": [
            {
              "sheetId": SHEET_ID,
              "startRowIndex": 0,
              "endRowIndex": 5,
              "startColumnIndex": 0,
              "endColumnIndex": 4,
            }
          ],
          "booleanRule": {
            "condition": {
              "type": "TEXT_EQ",
              "values": [
                {
                  "userEnteredValue": "Total Cost"
                }
              ]
            },
            "format": {
              "textFormat": {
                "bold": true
              }
            }
          }
        }
      }
    }
  ]
}