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;
}
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;
}
行の第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;
}
次は、グループ化の範囲内を指定した場合の例です。
この範囲の列にグループ化が設定されていて、その範囲の間を指定した場合、
おしまい。。