条件付き書式

Google Sheets API を使用すると、スプレッドシート内の条件付き書式設定ルールを作成および更新できます。条件付き書式では、特定の書式タイプ(太字、斜体、取り消し線、前景色、背景色)のみを制御できます。このページの例は、Sheets API を使用して条件付き書式の一般的な操作を実行する方法を示しています。

これらの例では、特定の言語に依存しない HTTP リクエストの形式を採用しています。Google API クライアント ライブラリを使用してバッチ アップデートをさまざまな言語で実装する方法については、スプレッドシートを更新するをご覧ください。

以下の例では、SPREADSHEET_IDSHEET_ID というプレースホルダを使用して、これらの ID をどこで指定するかを示しています。スプレッドシート ID はスプレッドシートの URL で確認できます。シート ID は、spreadsheets.get メソッドを使用して取得できます。範囲は A1 表記を使用して指定します。範囲の例は Sheet1!A1:D5 です。

条件付き書式の色のグラデーションを行に追加する

次の spreadsheets.batchUpdate メソッドのコードサンプルは、AddConditionalFormatRuleRequest を使用して、シートの行 10 と 11 に新しいグラデーションの条件付き書式設定ルールを設定する方法を示しています。最初のルールは、その行のセルの背景色がセルの値に応じて設定されるように指定します。行の最小値は濃い赤、最大値は明るい緑で表示されます。その他の値の色は補間されます。2 番目のルールでも同じことを行いますが、特定の数値でグラデーションのエンドポイント(および異なる色)が決まります。このリクエストでは、type として sheets.InterpolationPointType を使用しています。

リクエスト プロトコルは次のようになります。

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
      }
    },
  ]
}

リクエスト後、適用された形式ルールによってシートが更新されます。行 11 のグラデーションの maxpoint は 256 に設定されているため、この値を超える値は maxpoint の色になります。

グラデーション書式を追加した結果

条件付き書式設定ルールを一連の範囲に追加する

次の spreadsheets.batchUpdate メソッドのコードサンプルは、AddConditionalFormatRuleRequest を使用してシートの列 A と C に新しい条件付き書式設定ルールを設定する方法を示しています。このルールは、10 以下の値を持つセルの背景色を濃い赤に変更するように指定します。このルールはインデックス 0 で挿入されるため、他の書式設定ルールよりも優先されます。このリクエストでは、BooleanRuletype として ConditionType を使用しています。

リクエスト プロトコルは次のようになります。

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
      }
    }
  ]
}

リクエスト後、適用された書式設定ルールによってシートが更新されます。

条件付き書式を追加した結果

日付とテキストの条件付き書式を範囲に追加する

次の spreadsheets.batchUpdate メソッドのコードサンプルは、AddConditionalFormatRuleRequest を使用して、セルの日付とテキストの値に基づいて、シートの範囲 A1:D5 に新しい条件付き書式設定ルールを設定する方法を示しています。テキストに文字列「Cost」(大文字と小文字が区別されます)が含まれている場合、最初のルールはセルテキストを太字に設定します。セルに 8 日以上前の日付が含まれている場合、2 番目のルールはセルテキストを斜体にして青色にします。このリクエストでは、BooleanRuletype として ConditionType を使用しています。

リクエスト プロトコルは次のようになります。

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
      }
    }
  ]
}

リクエスト後、適用された書式設定ルールによってシートが更新されます。この例では、現在の日付は 2016 年 9 月 26 日です。

テキストと日付の条件付き書式を追加した結果

カスタム数式ルールを範囲に追加する

次の spreadsheets.batchUpdate メソッドのコードサンプルは、AddConditionalFormatRuleRequest を使用して、カスタム数式に基づいてシートの範囲 B5:B8 に新しい条件付き書式設定ルールを設定する方法を示しています。このルールは、列 A と列 B のセルの積を計算します。積が 120 を超える場合、セルのテキストは太字の斜体に設定されます。このリクエストでは、BooleanRuletype として ConditionType を使用しています。

リクエスト プロトコルは次のようになります。

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
      }
    }
  ]
}

リクエスト後、適用された書式設定ルールによってシートが更新されます。

カスタム条件付き書式を追加した結果

条件付き書式ルールを削除する

次の spreadsheets.batchUpdate メソッドのコードサンプルは、DeleteConditionalFormatRuleRequest を使用して、SHEET_ID で指定されたシートのインデックス 0 の条件付き書式設定ルールを削除する方法を示しています。

リクエスト プロトコルは次のようになります。

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

条件付き書式設定ルールのリストを読み取る

次の spreadsheets.get メソッドのコードサンプルは、スプレッドシート内の各シートのタイトル、SHEET_ID、すべての条件付き書式設定ルールのリストを取得する方法を示しています。fields クエリ パラメータによって、返されるデータが決まります。

リクエスト プロトコルは次のようになります。

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

レスポンスは Spreadsheet リソースで構成され、Sheet オブジェクトの配列が含まれます。各オブジェクトには、SheetProperties 要素と ConditionalFormatRule 要素の配列が含まれます。指定したレスポンス フィールドがデフォルト値に設定されている場合、レスポンスから省略されます。このリクエストでは、BooleanRuletype として ConditionType を使用しています。

{
  "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
              }
            }
          }
        },
        ...
      ]
    }
  ]
}

条件付き書式設定ルールまたはその優先度を更新する

次の spreadsheets.batchUpdate メソッドのコードサンプルは、複数のリクエストで UpdateConditionalFormatRuleRequest を使用する方法を示しています。最初のリクエストは、既存の条件付き書式設定ルールをより数字の大きいインデックスに移動します(0 から 2 に移動し、その優先度を下げます)。2 番目のリクエストは、インデックス 0 の条件付き書式設定ルールを、範囲 A1:D5 で、指定されたテキスト("Total Cost")を含むセルを書式設定する新しいルールに置き換えます。最初のリクエストによる移動は 2 番目のリクエストが始まる前に完了するため、2 番目のリクエストは、当初はインデックス 1 であったルールを置き換えます。このリクエストでは、BooleanRuletype として ConditionType を使用しています。

リクエスト プロトコルは次のようになります。

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
              }
            }
          }
        }
      }
    }
  ]
}