[Google Sheets API] シートを追加・複製・削除する、シートの情報(名前等)を更新する

Google Sheets API v4（Java）を使用して、
スプレットシートのシートの追加、更新、複製、削除する方法
についてご紹介します。

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

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

|No|目次|
|---|---|
|0|[シートの情報](#0-シートの情報)|
|1|[シートを追加](#1-シートを追加)|
|2|[シートの更新](#2-シートの更新)|
|3|[シートの複製](#3-シートの複製)|
|4|[シートの削除](#4-シートの削除)|

## 0. シートの情報
シートの情報は***SheetPropertiesクラス***で設定します。
|項目名|メソッド|内容|
|---|---|---|
|シートID|setSheetId|シートを識別するID|
|シートの名前|setTitle|シートタブに表示される名前|
|シートインデックス|setIndex|シートの配置位置(並び順)<br>０スタート、省略時は一番最後に追加|
|テキストの方向|setRightToLeft|テキストの描画方向<br>RTL(右から左にテキストが書かれる)<br>LTR(通常、左から右にテキストが書かれる)|
|表示・非表示|setHidden|シートを表示有無<br>メニュー：「表示」 ⇨ 「非表示のシート」|
|タブの色|setTabColor<br>または<br>setTabColorStyle|シートのタブの色<br>タブメニュー：「色を変更」|
|行、列に関する情報|setGridProperties|GridPropertiesクラスで設定|

行、列に関する情報は、***GridPropertiesクラス***に設定します。

|項目名|メソッド|内容|
|---|---|---|
|行の数|setRowCount|行の数|
|列の数|setColumnCount|列の数|
|行の固定|setFrozenRowCount|固定する行の数<br>メニュー：「表示」 ⇨ 「固定」|
|列の固定|setFrozenColumnCount|固定する列の数<br>メニュー：「表示」 ⇨ 「固定」|
|グリッドの表示・非表示|setHideGridlines|グリッドの表示有無<br>メニュー：「表示」⇨「グリッド線」|

## 1. シートを追加
指定したスプレットシートにシートを追加します。

シートIDは、省略可能です。省略時は自動で割り振られます
シートの名前は、既に存在する名前だとエラーになります。

**サンプル コード**
```java
public Request addSheet(Integer sheetId) {
    Request request = new Request();

    SheetProperties prop = new SheetProperties();
    prop.setSheetId(1);				//設定するシートID(gid)
    prop.setTitle("追加テスト"); 		//タブのタイトル名(すでに存在するタブの名前だとエラー)
    prop.setIndex(0); 				//シートの挿入位置(0スタート)
    //prop.setHidden(true);			//シートを非表示にする場合
　　　　　　　　//prop.setRightToLeft(true);	//テキストの方向（true:RTL、false:LTR）
    
    GridProperties grid = new GridProperties();
    grid.setRowCount(5); 			//行の数
    grid.setColumnCount(5); 		//列の数
    grid.setFrozenRowCount(2);		//固定する行数
    grid.setFrozenColumnCount(2); 	//固定する列数
    grid.setHideGridlines(true); 	//グリッドの線を表示しない場合
    prop.setGridProperties(grid); 	//シートがグリッドの場合に情報設定
    
    Color tabColor = new Color();
    tabColor.setRed(1.0f);
    tabColor.setGreen(0f);
    tabColor.setBlue(0f);
    tabColor.setAlpha(0f);
    prop.setTabColor(tabColor); 	//タブの色

    AddSheetRequest r = new AddSheetRequest();
    r.setProperties(prop); 	 	 	//プロパティーの設定

    request.setAddSheet(r);
    return request;
}
```
**実行結果**
指定した箇所に「追加シート」が5行5列、固定2行2列、グリッド線なしで追加されました。
<img width="480" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/114621/42748aeb-6ca3-250e-5c0c-36e6264a5799.png">

## 2. シートの更新
指定したシートの情報を更新します。

SheetPropertiesクラスで更新する内容を設定します。

更新したい項目は、UpdateSheetPropertiesRequestクラスのsetFieldsで指定します。
指定がない項目は更新されません。
複数の項目を更新したい場合は、「,」で繋げます。
|field|更新する項目|
|---|---|
|title|シートの名前|
|index|シートインデックス|
|rightToLeft|テキストの方向|
|hidden|表示・非表示|
|tabColor|タブの色|
|gridProperties|行、列に関する情報|

**サンプル コード**
シートの名前とシートの並び順を更新してみます。
```java
public Request updateSheetProperties(Integer sheetId) {
    Request request = new Request();

    SheetProperties prop = new SheetProperties();
    prop.setTitle("シート名更新"); //シートの名前
    prop.setIndex(1);           //シートの配置位置（並び順）
    
    UpdateSheetPropertiesRequest r = new UpdateSheetPropertiesRequest();
    r.setFields("title,index");
    r.setProperties(prop);
    
    request.setUpdateSheetProperties(r);
    return request;
}
```
## 3. シートの複製
指定したシートをコピーします。
コピーで作成されたシートのIDを指定することも可能ですが、
既に存在するシートIDを指定するとエラーになります。

**サンプル コード**
```java
public Request duplicateSheet(Integer sheetId) {
    Request request = new Request();

    DuplicateSheetRequest r = new DuplicateSheetRequest();
    r.setSourceSheetId(sheetId);   //コピー元のシートID
    r.setNewSheetName("コピーテスト"); //コピーして追加するシートの名前
    r.setInsertSheetIndex(0);      //複製したシートの挿入位置(0スタート、省略時は一番最後にシートが追加される)
    //r.setNewSheetId(1);		   //挿入するシートID(gid) IDを自分で設定したい場合のみ
    
    request.setDuplicateSheet(r);
    return request;
}
```
**実行結果**
シートがコピーされました。
<img width="480" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/114621/a815e523-9247-be5c-8b3a-1062a58107db.png">

## 4. シートの削除
指定したシートを削除します。

**サンプル コード**
```java
public Request deleteSheet(Integer sheetId) {
    Request request = new Request();

    DeleteSheetRequest r = new DeleteSheetRequest();
    r.setSheetId(sheetId);    //削除するシートのID
    request.setDeleteSheet(r);

    return request;
}
```
**実行結果**
シートが削除されました。
<img width="480" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/114621/9e593272-d058-3149-686a-1c095eb31931.png">

<br>
おしまい。。