[Google Sheets API] 名前付き範囲を追加・更新・削除する

Google Sheets API v4（Java）を使用して、
スプレットシートに名前付き範囲を追加・更新・削除する方法
についてご紹介します。

**名前付き範囲とは**
Google スプレッドシート内の範囲に名前を付けることができます。
名前をつけることで範囲を見つけやすくしたり、数式を簡単に作成することができます。
例えば、「A1:B2」の範囲に「test」という名前をつけると、
「=SUM(A1:B2)」を「=SUM(test)」と入力することができます。

設定した名前付き範囲は、
スプレットシートのメニュー　「データ　⇨　名前付き範囲」
から確認することができます。

:::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を付与することができます。IDを指定しない場合は、
自動で割り振られます。

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

    GridRange grid = new GridRange();
    grid.setSheetId(sheetId);     //設定するシートID
    grid.setStartRowIndex(0);     //開始行(0スタート)
    grid.setEndRowIndex(6);       //終了行(0スタート)
    grid.setStartColumnIndex(12); //開始列(0スタート)
    grid.setEndColumnIndex(16);   //終了列(0スタート)

    NamedRange range = new NamedRange();
    range.setName("test");            //名前の設定
    range.setNamedRangeId("test_id"); //ID(省略すると自動で割り振られる)の設定
    range.setRange(grid);             //範囲の設定

    AddNamedRangeRequest r = new AddNamedRangeRequest();
    r.setNamedRange(range);

    request.setAddNamedRange(r);
    return request;
}
```
**実行結果**
メニュー ： データ ⇨ 名前付き範囲
を開くと、名前付き範囲が追加されてるのがわかります。
<img width="480" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/114621/903252c4-6b4c-d015-9333-567a2bb0945f.png">

## 2. 名前付き範囲の更新
指定したシートの定義された名前付き範囲の情報を更新します。
更新したいIDを指定し、名前か範囲の一方を更新するか、両方を更新するかを
UpdateNamedRangeRequestのsetFieldsで指定します。
setFieldsの指定がない場合は更新されませんのでご注意ください。

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

    GridRange grid = new GridRange();
    grid.setSheetId(sheetId);     //設定するシートID
    grid.setStartRowIndex(10);    //開始行(0スタート)
    grid.setEndRowIndex(20);      //終了行(0スタート)
    grid.setStartColumnIndex(12); //開始列(0スタート)
    grid.setEndColumnIndex(16);   //終了列(0スタート)

    NamedRange range = new NamedRange();
    range.setName("test_new");        //名前
    range.setNamedRangeId("test_id"); //ID
    range.setRange(grid);             //範囲

    UpdateNamedRangeRequest r = new UpdateNamedRangeRequest();
    r.setFields("name,range");  //変更するフィールド（名前：name、範囲：range。両方ならname,range）
    r.setNamedRange(range);     //範囲の設定

    request.setUpdateNamedRange(r);
    return request;
}
```
**実行結果**
名前付き範囲の名前と範囲が更新されました。
<img width="480" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/114621/b6a80048-12b7-0428-7951-84616d43254d.png">

## 3. 名前付き範囲の削除
指定したシートの定義された名前付き範囲を削除します。

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

    DeleteNamedRangeRequest r = new DeleteNamedRangeRequest();
    r.setNamedRangeId("test_id"); //削除するID

    request.setDeleteNamedRange(r);
    return request;
}
```
**実行結果**
名前付き範囲が削除されました。
<img width="480" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/114621/34446b6a-7e13-7451-3e95-87f621b917ed.png">

おしまい。。