1
0

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-04

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 スライサーの仕様
1 タイトルのテキスト形式の設定
2 スライサーのデータ範囲
3 スライサーのフィルタリング基準
2 スライサーの更新
3 スライサーの削除

1. スライサーの追加

スライサーを追加します。

追加時は下記3つを設定します。
・スライサー(オブジェクト)のID
・スライサーのサイズと配置場所
・スライサーの仕様

スライサーIDはすでに登録済みのオブジェクトIDがあるとエラーになります。
指定しなければ自動採番されます。

サンプル コード

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

    Slicer slicer = new Slicer();
    //スライサー(オブジェクト)のID。省略時は自動採番
    slicer.setSlicerId(1);
    
    //スライサーのサイズと配置場所を設定
    slicer.setPosition(getEmbeddedObjectPosition(sheetId));
    
    //スライサーの仕様を設定
    slicer.setSpec(getSlicerSpec(sheetId));
    
    AddSlicerRequest r = new AddSlicerRequest();
    r.setSlicer(slicer);

    request.setAddSlicer(r);
    return request;
}

1.1. スライサーのサイズと配置場所

EmbeddedObjectPositionクラスで指定します。

配置する位置は、指定したセル(右下)からのオフセット値(ピクセル)になります。
例えば、
4行目D列  : setRowIndex(3)、setColumnIndex(3)
(x,y)=(0,0) : setOffsetXPixels(0)、setOffsetYPixels(0)
と指定した場合、4列目D列のセルの右下に配置されます。

スライサーはデータ範囲と同じセルに配置する必要があるため、
setSheetId()、setNewSheet()は使用できません。

サンプル コード

public EmbeddedObjectPosition getEmbeddedObjectPosition(Integer sheetId) {
    EmbeddedObjectPosition pos = new EmbeddedObjectPosition();
    
    OverlayPosition overlay = new OverlayPosition();
    //起点となるセルの指定
    GridCoordinate grid = new GridCoordinate();
    grid.setSheetId(sheetId); 			//配置するシートID
    grid.setRowIndex(10); 				//開始行(0スタート)
    grid.setColumnIndex(10); 			//開始列(0スタート)
    overlay.setAnchorCell(grid);		//オブジェクトが固定されているセル。
    
    //起点となるセルからのオフセット値
    overlay.setOffsetXPixels(0);		//開始X座標。
    overlay.setOffsetYPixels(0);		//開始Y座標。
//	overlay.setHeightPixels(50);		//高さ。省略時は371px
//	overlay.setWidthPixels(50);		    //幅。省略時は600px

    pos.setOverlayPosition(overlay);	//オブジェクトがグリッドの上にオーバーレイされる位置。
    
    return pos;
}

1.2. スライサーの仕様

SlicerSpecクラスでスライサーの仕様を設定します。

タイトルの水平方向の配置はsetHorizontalAlignment()で指定できます。

alignment 水平方向の配置
LEFT 左寄せ
CENTER 中央
RIGHT 右寄せ

サンプル コード

public SlicerSpec getSlicerSpec(Integer sheetId) {
    SlicerSpec spec = new SlicerSpec();
    
    //スライサーのタイトル
    spec.setTitle("test");
    
    //スライサーのタイトルのテキスト形式
    spec.setTextFormat(getTextFormat());
    
    //スライサーのタイトルの水平方向の配置(デフォルトはLEFT)
    spec.setHorizontalAlignment("CENTER");
    
    //ピボットテーブルに適用するか?
    spec.setApplyToPivotTables(true);

    //スライサーの背景色
    spec.setBackgroundColor(new Color().setBlue(1.0f));   //または setBackgroundColorStyle
    
    //フィルターが適用されるデータテーブル内の列インデックス
    spec.setColumnIndex(0);
    
    //スライサーのデータ範囲
    spec.setDataRange(getGridRange(sheetId));

    //スライサーのフィルタリング基準
    spec.setFilterCriteria(getFilterCriteria());
    
    return spec;
}

1.2.1. タイトルのテキスト形式の設定

TextFormatクラスでテキスト形式を設定できます。
スライサーの場合、
下線(setUnderline())と取り消し線(setStrikethrough())は使えません。

サンプル コード

public TextFormat getTextFormat() {
    TextFormat format = new TextFormat();
    
    format.setBold(true);	        //ボールドか?
    format.setItalic(true);         //イタリックか?
    format.setFontSize(14);	        //フォントサイズ
        format.setFontFamily("Arial");	//フォントファミリ名

    //テキストの色
    Color cc = new Color();
    cc.setRed(1.0f).setGreen(0f).setBlue(0f);
    format.setForegroundColor(cc);

    return format;
}

1.2.2. スライサーのデータ範囲

GridRangeクラスでデータ範囲を設定します。

サンプル コード

public GridRange getGridRange(Integer sheetId) {
    GridRange range = new GridRange();
    
    range.setSheetId(sheetId);      //設定するシートID
    range.setStartRowIndex(0);      //開始行(0スタート)
    range.setEndRowIndex(4);        //終了行(1スタート)
    range.setStartColumnIndex(0);   //開始列(0スタート))
    range.setEndColumnIndex(3);     //終了列(1スタート)
    
    return range;
}

1.2.3. スライサーのフィルタリング基準

FilterCriteriaクラスでフィルタの内容を設定します。

フィルタリングの設定については、
下記記事に詳細をまとめてますのでこちらを参照ください。
⧉[Google Sheets API] セルに入力規則を設定する

サンプル コード

public FilterCriteria getFilterCriteria(){
    FilterCriteria filter = new FilterCriteria();
    
    BooleanCondition con = new BooleanCondition();
    List<ConditionValue> values = new ArrayList<>();
    ConditionValue value = new ConditionValue();
    value.setUserEnteredValue("2023-03-01");  //「2023-03-01」以降の日
    values.add(value);
    con.setValues(values);                    //条件の値。
    con.setType("DATE_AFTER");                //「次より後の日付」を指定
    
    filter.setCondition(con);
}

2. スライサーの更新

設定済みのスライサーを更新します。

スライサーの更新時に下記を指定します。
・更新するスライサー(オブジェクト)のID
・更新するスライサーの仕様

更新するスライサーの仕様は、「1. スライサーの追加」と同じSlicerSpecクラスを使います。
内容はそちらをご覧ください。

サンプル コード

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

    UpdateSlicerSpecRequest r = new UpdateSlicerSpecRequest();
    r.setSlicerId(1);                   //更新するスライサー(オブジェクト)のID
    r.setSpec(getSlicerSpec(sheetId));  //更新するスライサーの仕様

    request.setUpdateSlicerSpec(r);
    return request;
}

3. スライサーの削除

スライサーを削除します。

サンプル コード

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

    DeleteEmbeddedObjectRequest r = new DeleteEmbeddedObjectRequest();
    r.setObjectId(1);			//削除するオブジェクトのID。

    request.setDeleteEmbeddedObject(r);
    return request;
}

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?