1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

[Google Sheets API] 「シートと範囲を保護」を追加・更新・削除する

Last updated at Posted at 2024-03-02

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

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

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

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

No 目次
1 「シートと範囲を保護」を追加
1 シートを保護
2 範囲を保護
3 設定された保護IDを取得
2 「シートと範囲を保護」を更新
3 「シートと範囲を保護」を削除

1.  「シートと範囲を保護」を追加

シートとセル範囲を指定して保護することができます。

編集の際の動作
保護されたシートまたは範囲を編集した際の動作を指定できます。

・この範囲を編集するときに警告を表示する
  保護されたシートまたは範囲を編集した際に下記のメッセージが表示されます。
  編集自体は可能です。
  
  ProtectedRangeクラスのsetWarningOnlyメソッドでtrueを指定します。

・この範囲を編集できるユーザーを制限する
  保護されたシートまたは範囲は、指定されたユーザーのみ編集できます。
  ユーザーの指定がなくとも、オーナーは編集できます。
  ProtectedRangeクラスのsetWarningOnlyメソッドでfalseを指定します。(デフォルト)

1.1. シートを保護

シートに対して保護を設定することができます。
保護したシート内の一部のセルのみ保護から外すこともできます。

サンプル コード
シートの保護をしたい場合は、範囲を指定するProtectedRangeクラスのsetRangeメソッドで
シートIDのみを指定します。

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

    AddProtectedRangeRequest r = new AddProtectedRangeRequest();
    ProtectedRange protectedRange = new ProtectedRange();

    //この保護範囲の説明。
    protectedRange.setDescription("範囲保護の説明だよ");

    //編集可能なユーザーの指定
    //編集アクセス権を持つユーザーのメールアドレスのみ設定できます。
    Editors editor = new Editors();
    List<String> users = new ArrayList<>();
    users.add("******@*****.iam.gserviceaccount.com");
    editor.setUsers(users);
    protectedRange.setEditors(editor);

    //保護する範囲(この場合はシート)
    GridRange sheet = new GridRange(); //枠線の範囲
    sheet.setSheetId(sheetId);         //シートID
    protectedRange.setRange(sheet);    //保護する範囲(シートIDだけ指定)

    //保護するシート内の指定したセル範囲のみ保護が解除されます。
    List<GridRange> unprotectedRanges = new ArrayList<>();
    GridRange grid = new GridRange(); //枠線の範囲
    grid.setSheetId(sheetId);
    grid.setStartRowIndex(1);         //開始行(0スタート)
    grid.setEndRowIndex(4);           //終了行(1スタート)
    grid.setStartColumnIndex(1);      //開始列(0スタート)
    grid.setEndColumnIndex(3);        //終了列(1スタート)
    unprotectedRanges.add(grid);
    protectedRange.setUnprotectedRanges(unprotectedRanges);

    //この範囲を編集するときに警告を表示する 
    protectedRange.setWarningOnly(true);
    
    r.setProtectedRange(protectedRange);	//追加する保護範囲

    request.setAddProtectedRange(r);
    return request;
}

実行結果
シートが保護されました。
  
  

1.2. 範囲を保護

指定したシートの指定範囲を保護することができます。

ProtectedRangeクラスのsetRangeメソッドにセルの範囲を「範囲を保護」になります。
その他は「シートを保護」と変わりません。
ただし、保護シート内のセル範囲を保護から除外する範囲を指定する
ProtectedRangeクラスのsetUnprotectedRangesは使用できません。

サンプル コード

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

    AddProtectedRangeRequest r = new AddProtectedRangeRequest();
    ProtectedRange protectedRange = new ProtectedRange();

    //編集可能なユーザーの指定
    //編集アクセス権を持つユーザーのメールアドレスのみ設定できます。
    Editors editor = new Editors();
    List<String> users = new ArrayList<>();
    users.add("******@*****.iam.gserviceaccount.com");
    editor.setUsers(users);
    protectedRange.setEditors(editor);

    //保護する範囲
    GridRange grid = new GridRange(); //枠線の範囲
    grid.setSheetId(sheetId);
    grid.setStartRowIndex(1);         //開始行(0スタート)
    grid.setEndRowIndex(4);           //終了行(1スタート)
    grid.setStartColumnIndex(1);      //開始列(0スタート)
    grid.setEndColumnIndex(3);        //終了列(1スタート)
    protectedRange.setRange(grid);    //保護する範囲(シートIDだけ指定)
    
    r.setProtectedRange(protectedRange);	//追加する保護範囲

    request.setAddProtectedRange(r);
    return request;
}

1.3. 設定された保護IDを取得

保護を設定や更新した後、保護IDが取得できます。
この保護IDを使って、保護の更新と削除を行います。

サンプル コード

//batchUpdateを実行
BatchUpdateSpreadsheetResponse update = sheets.batchUpdate(fileId, body).execute();

//実行後にレスポンスを取得する
for(Response response : update.getReplies()) {

    //AddProtectedRangeRequestに対するレスポンスを取得
    AddProtectedRangeResponse res = response.getAddProtectedRange();
    if(res==null)  continue;

    //保護IDを取得
    return res.getProtectedRange().getProtectedRangeId();
}

2. 「シートと範囲を保護」を更新

設定されている「シートと範囲を保護」を更新します。

更新したい保護IDを指定して更新します。
保護IDの取得は、前述の設定された保護IDを取得を参照してください。

更新したい保護IDの指定と、更新するフィールドの指定以外は
「シートと範囲を保護」を追加と同じです。

更新するフィールドの指定
更新したいフィールドを文字列で設定します。設定がない場合は更新されません。
複数のフィールドを指定したい場合は、「,」で繋げます。
編集可能なユーザーは、追加ではなく更新なので設定済みのリストは
上書きされます。

フィールド 内容
description 保護の説明
editors 編集可能なユーザー
range 保護する範囲
unprotectedRanges シート保護から除外する範囲
warningOnly 編集の際の動作

サンプル コード
保護範囲の説明を更新します。
更新する保護IDの指定は必須です。

public static Request updateProtectedRange() {
    Request request = new Request();

    ProtectedRange protectedRange = new ProtectedRange();
    protectedRange.setDescription("説明の更新");      //この保護範囲の説明。
    protectedRange.setProtectedRangeId(539077030);  //更新する保護IDを指定
    
    UpdateProtectedRangeRequest r = new UpdateProtectedRangeRequest();
    r.setProtectedRange(protectedRange);
    r.setFields("description");
    
    request.setUpdateProtectedRange(r);
    return request;
}

3.  「シートと範囲を保護」を削除

設定されている「シートと範囲を保護」を削除します。

削除したい保護IDを指定して削除します。
保護IDの取得は、前述の設定された保護IDを取得を参照してください。

サンプル コード

public Request deleteProtectedRange() {
    Request request = new Request();

    DeleteProtectedRangeRequest r = new DeleteProtectedRangeRequest();
    r.setProtectedRangeId(1683825936);	//保護IDを指定
    
    request.setDeleteProtectedRange(r);
    return request;
}

おしまい。。
1
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
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?