[Google Sheets API] セルの「交互の背景色」を追加・更新・削除する

Google Sheets API v4（Java）を使用して、
スプレットシートのセルの色を交互にする方法とその更新・削除
についてご紹介します。

**交互の背景色とは**
シートメニュー：「表示形式」 ⇨　「交互の背景色」で設定できる機能です。
簡単にセルの行の色を交互に設定することができます。
<img width="480" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/114621/7baa48b9-59da-3787-2d6d-85ff181c69bf.png">

:::note info
APIを利用する環境の準備から始める場合や、コードを実行する際は、
[⧉[Google Sheets API] Google Sheets API v4をJavaで操作する](https://qiita.com/doran/items/3d43f776188b2281044c)
を参照ください。
```
例：requests.add(moveDimension(sheetId)); //実行したいリクエストのMethodを指定
```
:::

:::note info
その他のGoogle Sheets APIは、下記の記事を参照ください。
[⧉[Google Sheets API] JavaでスプレットシートのメニューとAPIを関連づけてみた](https://qiita.com/doran/items/2f6f8932b994fbd1a170)
:::

|No|目次|
|---|---|
|1|[交互の背景色の追加](#1-交互の背景色の追加)|
|2|[交互の背景色の更新](#2-交互の背景色の更新)|
|3|[交互の背景色の削除](#3-交互の背景色の削除)|

## 1. 交互の背景色の追加
交互の背景色を追加します。

既に「交互の背景色」が設定されている範囲を含めるとエラーになります。

・範囲IDは省略できます。
　BandingPropertiesクラスのsetBandedRangeId
　で任意のIDを指定できます。省略した場合は自動採番になります。

・交互にする背景色を行か列、または両方にするか指定できます。
　・行
　　BandingPropertiesクラスのsetRowProperties
　・列
　　BandingPropertiesクラスのsetColumnProperties

・指定する色はBandingPropertiesクラスのメソッドで指定します。
　・奇数行・列の色（必須）
　　setFirstBandColorr または setFirstBandColorStyle
　・偶数行・列の色（必須）
　　setSecondBandColor または setSecondBandColorStyle
　・ヘッダ（1行目または1列目）の色
　　setHeaderColor または setHeaderColorStyle
　・フッタ(最終行または最終列)の色
　　setFooterColor または setFooterColorStyle

**サンプル コード**
ヘッダ、フッタの色を指定して行のシマシマにしてみます。
```
public Request addBanding(Integer sheetId) {
    Request request = new Request();

    BandedRange bandedRange = new BandedRange();
    bandedRange.setBandedRangeId(1);//範囲ID（省略した場合は自動採番）
    
    //行のプロパティ設定
    BandingProperties properties = new BandingProperties();
    bandedRange.setRowProperties(properties);
    
    Color fband = new Color();              //交互に現れる最初の色。（必須）
    fband.setRed(1.0f);fband.setGreen(0f);fband.setBlue(0f);
    properties.setFirstBandColor(fband);	//（または setFirstBandColorStyle）
    
    Color sband = new Color();              //交互に現れる2番目の色。（必須）
    sband.setRed(1.0f);sband.setGreen(1.0f);sband.setBlue(0f);
    properties.setSecondBandColor(sband);	//（または setSecondBandColorStyle）
    
    Color header = new Color();             //ヘッダの行または列の色。ここでは行
    header.setRed(0f);header.setGreen(0f);header.setBlue(1.0f);
    properties.setFooterColor(header);      //（または setFooterColorStyle）
    
    Color footer = new Color();             //フッターの行または列の色。ここでは行
    footer.setRed(0f);footer.setGreen(1.0f);footer.setBlue(0f);
    properties.setHeaderColor(footer);      //（または setHeaderColorStyle）
    
    //適用する範囲の設定
    GridRange range = new GridRange();
    range.setSheetId(sheetId);             //設定するシートID
    range.setStartRowIndex(0);             //開始行(0スタート)
    range.setEndRowIndex(10);              //終了行(1スタート)
    range.setStartColumnIndex(0);          //開始列(0スタート)
    range.setEndColumnIndex(5);            //終了列(1スタート)
    bandedRange.setRange(range);

    AddBandingRequest r = new AddBandingRequest();
    r.setBandedRange(bandedRange);
    
    request.setAddBanding(r);
    return request;
}
```
**実行結果**
行でシマシマになりました。
<img width="480" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/114621/44287b5e-f65c-56e4-0122-c0d10eece684.png">

## 2. 交互の背景色の更新
設定済みの「交互の背景色」を更新します。

更新する範囲IDの指定は必須です。

更新したい内容は、UpdateBandingRequestクラスのsetFieldsで指定します。
指定がない場合は更新されません。
複数の更新がある場合は、「,」で繋げます。
|fields|更新内容|
|---|---|
|columnProperties|列の色|
|rowProperties|行の色|
|range|適用する範囲|

**サンプル コード**
列にシマシマを追加してみます。
```
public Request addBanding() {
    Request request = new Request();

    BandedRange bandedRange = new BandedRange();
    bandedRange.setBandedRangeId(1);//更新する範囲ID。(必須)
    
    //列のプロパティ設定
    BandingProperties properties = new BandingProperties();
    bandedRange.setColumnProperties(properties);
    
    Color fband = new Color();              //交互に現れる最初の色。（必須）
    fband.setRed(1.0f);fband.setGreen(0f);fband.setBlue(0f);
    properties.setFirstBandColor(fband);	//（または setFirstBandColorStyle）
    
    Color sband = new Color();              //交互に現れる2番目の色。（必須）
    sband.setRed(1.0f);sband.setGreen(1.0f);sband.setBlue(0f);
    properties.setSecondBandColor(sband);	//（または setSecondBandColorStyle）
    
    Color header = new Color();             //ヘッダの行または列の色。ここでは列
    header.setRed(0f);header.setGreen(0f);header.setBlue(1.0f);
    properties.setFooterColor(header);      //（または setFooterColorStyle）
    
    Color footer = new Color();             //フッターの行または列の色。ここでは列
    footer.setRed(0f);footer.setGreen(1.0f);footer.setBlue(0f);
    properties.setHeaderColor(footer);      //（または setHeaderColorStyle）
    
	UpdateBandingRequest r = new UpdateBandingRequest();
	r.setBandedRange(bandedRange);
	r.setFields("columnProperties");　　　　　　　　　　　　　　　　//列の色を更新
    
    request.setUpdateBanding(r);
    return request;
}
```
**実行結果**
行にシマシマが追加されました。ド派手
<img width="480" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/114621/9923b860-628e-ab6b-bb9a-9e92f645ff34.png">


## 3. 交互の背景色の削除
設定済みの「交互の背景色」を削除します。

削除する範囲IDの指定は必須です。
**サンプル コード**
```
public Request deleteBanding() {
    Request request = new Request();

    DeleteBandingRequest r = new DeleteBandingRequest();
    r.setBandedRangeId(1);     //削除する範囲ID
    
    request.setDeleteBanding(r);
    return request;
}
```
**実行結果**
スッキリ削除されました。
<img width="480" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/114621/39f25302-ef5d-0fb0-e95a-d2a899e9b549.png">


おしまい。。