2
1

[Google Sheets API] グループ化を追加・更新・削除する

Last updated at Posted at 2024-03-04

Google Sheets API v4(Java)を使用して、
スプレットシートのシート単位の保護と、セル範囲の保護の追加・更新・削除
についてご紹介します。

グループ化とは

指定したセルの範囲(行または列)をまとめて折りたたんで表示にしたり、
再表示したりする機能です。
単純な列、行の非表示機能とは異なり、複数の行、列をグループ化したり、
グループ化を入れ子(階層)にしたりできます。

グループ化を入れ子(階層)にした場合、
列なら上から1階層、2階層、3階層。。。
行なら左から1階層、2階層、3階層。。。
というように、より広い範囲が上位の階層となります。

APIを利用する環境の準備から始める場合や、コードを実行する際は、
⧉[Google Sheets API] Google Sheets API v4をJavaで操作する
を参照ください。

//例:
requests.add(moveDimension(sheetId)); //実行したいリクエストのMethodを指定

その他のGoogle Sheets APIは、下記の記事を参照ください。
⧉[Google Sheets API] JavaでスプレットシートのメニューとAPIを関連づけてみた

No 目次
1 グループ化を追加
2 グループ化を更新
3 グループ化を削除
1 階層で削除
2 範囲を指定して削除

1. グループ化を追加

行または列の範囲を指定してグループ化を追加します。

既に同じ行または列のグループ化がされている場合、
同じ位置にグループ化が追加されます。

サンプル コード
B〜C列をグループ化します。

public Request addDimensionGroup(Integer sheetId) {
    Request request = new Request();

    DimensionRange range = new DimensionRange();
    range.setSheetId(sheetId);      //グループ化を追加するシートID
    range.setDimension("COLUMNS");  //行:ROWS、列:COLUMNS
    range.setStartIndex(1);         //行または列の開始位置
    range.setEndIndex(3);           //行または列の終了位置
    
    AddDimensionGroupRequest r = new AddDimensionGroupRequest();
    r.setRange(range);
    
    request.setAddDimensionGroup(r);
    return request;
}

実行結果
この状態で実行すると、

指定した列の範囲にグループ化が追加されました。

2. グループ化を更新

設定済みのグループ化を閉じたり、開いたりできます。

指定するグループ化は、階層と範囲が一致したもののみになるようです。
階層と範囲が異なる場合はエラーになります。

更新対象のフィールド(setFields)は「collapsed」を指定します。

サンプル コード
列の第2階層目にあるB〜C列のグループ化を閉じます。

public Request updateDimensionGroup(Integer sheetId) {
    Request request = new Request();

    DimensionRange range = new DimensionRange();
    range.setSheetId(sheetId);      //グループ化を更新するシートID
    range.setDimension("COLUMNS");  //行:ROWS、列:COLUMNS
    range.setStartIndex(1);         //行または列の開始位置
    range.setEndIndex(3);           //行または列の終了位置
    
    DimensionGroup group = new DimensionGroup();
    group.setCollapsed(true);       //true:グループ化を閉じる、false:グループ化を開く
    group.setDepth(2);              //階層を設定
    group.setRange(range);          //適用するグループ化を指定
    
    UpdateDimensionGroupRequest r = new UpdateDimensionGroupRequest();
    r.setDimensionGroup(group);
    r.setFields("collapsed");       //更新対象のフィールド
    
    request.setUpdateDimensionGroup(r);
    return request;
}

実行結果
この状態で実行すると、
 

第2階層にあるB〜C列のグループ化が閉じました。
 

3. グループ化を削除

行または列で設定されているグループ化を削除します。

削除には
・階層単位で削除する方法
・範囲を指定して削除する方法
があります。

3.1. 階層で削除

削除する範囲を指定せず、行または列の指定のみで実行すると第1階層から削除されます。

サンプル コード

public Request deleteDimensionGroup(Integer sheetId) {
    Request request = new Request();

    DimensionRange range = new DimensionRange();
    range.setSheetId(sheetId);    //削除するグループ化があるシートID
    range.setDimension("ROWS");   //行:ROWS、列:COLUMNS
    
    DeleteDimensionGroupRequest r = new DeleteDimensionGroupRequest();
    r.setRange(range);
    
    request.setDeleteDimensionGroup(r);
    return request;
}

実行結果
行のグループ化が第3階層まである場合、

行の第1階層のグループ化が削除されました。
サンプルコードを繰り返して実行すると同じように第1階層から削除されていきます。

3.2. 範囲を指定して削除

グループ化の範囲を指定して削除されます。

範囲が完全に一致するグループ化がある場合はそのグループ化を
無い場合でその範囲を含むグループ化がある場合はその範囲だけ削除されます。

サンプル コード
B〜C列のグループ化を削除します。

public Request deleteDimensionGroup(Integer sheetId) {
    Request request = new Request();

    DimensionRange range = new DimensionRange();
    range.setSheetId(sheetId);       //削除するグループ化があるシートID
    range.setDimension("COLUMNS");   //行:ROWS、列:COLUMNS
    range.setStartIndex(1);          //行または列の開始位置
    range.setEndIndex(3);            //行または列の終了位置
    
    DeleteDimensionGroupRequest r = new DeleteDimensionGroupRequest();
    r.setRange(range);
    
    request.setDeleteDimensionGroup(r);
    return request;
}

実行結果
この状態で実行すると、
 

指定した範囲のグループ化のみが削除されました。
 

次は、グループ化の範囲内を指定した場合の例です。
この範囲の列にグループ化が設定されていて、その範囲の間を指定した場合、

指定した間のグループ化のみが削除され、2つに分割されます。

おしまい。。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1