GASでシート上の画像を取得し、サイズ・位置変更や削除する方法(getImages)

スプレッドシートのシート上にある画像はGoogle Apps Script(GAS)で取得し、各種操作することができます。

今回、GASでシートに存在する画像を取得し、サイズ変更や位置変更、削除する方法を解説します。

スプレッドシートのシートに画像表示

スプレッドシートではシートのセルを使って、表計算を行う意外に画像を表示することができます。

Google Apps Script(GAS)のinsertImageメソッドでスプレッドシートに画像挿入した結果

スプレッドシートに画像挿入することで、表計算意外の利用方法が可能です。

GASでスプレッドシート上の画像を取得・操作

Google Apps Script(GAS)では、スプレッドシート上に表示されている画像を取得することができます。

取得した画像はシート上で色々な操作が可能で、位置を変更したり、高さ・幅などサイズ変更も可能です。

そのため、GASスクリプトでシート上の画像操作を行うことで、色々な自動化に応用できます。

シート上の画像取得はgetImagesメソッド

シート上に存在している画像を取得するGoogle Apps Script(GAS)のメソッドはgetImagesメソッドです。

sheet.getImages()

画像を取得したいsheetオブジェクトで、引数不要でgetImagesメソッドを実行します。

Imagesと複数系になっているようにシート上に存在している画像をすべて取得し、配列のように1つ1つの画像を参照できます。

なお、getImagesで取得できる画像は、overGridImageクラスのオブジェクトとして取得され、blob形式ではありません。

後述しますが、このblob形式ではない点が、GASのgetImagesメソッドの制約になることがあります。

getImagesで取得した画像の操作一覧

getImagesで取得した画像はoverGridImageオブジェクトとして取得され、主に以下の操作ができます。

  1. 位置変更
  2. サイズ(高さ・幅)変更
  3. 削除

シート内画像の位置変更

overGridImage.setAnchorCell(range)

シート上にある画像の表示位置を変更します。

引数にはrangeオブジェクトを指定し、例えばB2セルに位置を変更する場合、overGridImage.setAnchorCell(sheet.getRange(2,2))と記述します。

GASスクリプトでシート内画像の表示位置変更が可能です。

シート内画像のサイズ(高さ・幅)変更

overGridImage.setHeight(高さの数値)

overGridImage.setWidth(幅の数値)

それぞれ、画像の高さと幅を設定します。

設定する際にはsetHeight、setWidthともに引数に数値を指定します。

シート内画像の削除

overGridImage.remove()

シート内画像をGASで削除するには、removeメソッドを使用します。

removeメソッドを実行した画像が、シート上から削除され、表示されなくなります。

他にもgetImagesで取得した画像の操作はありますが、主に利用するのは上記の3種類のメソッドです。

GASでシート内画像を取得・操作するサンプルコード

実際にGoogle Apps Script(GAS)でスプレッドシートのシート内にある画像を取得し、位置変更やサイズ変更するサンプルコードを紹介します。

スプレッドシートにある画像を挿入し表示している状態

上記のスプレッドシートのアクティブなシートにある画像をgetImagesメソッドで取得し、操作します。

getImagesメソッドでシート内画像を取得し、位置・サイズ変更するGASサンプルコードは以下の通りです。

Google Apps Script(GAS)でスプレッドシートのシートに存在する画像をgetImagesメソッドで取得し、位置変更やサイズ変更を実行するサンプルコード
function getImageFromSheet() {
  //スクリプトに紐づくスプレッドシートのアクティブなシートを取得
  let mySheet = SpreadsheetApp.getActiveSheet();
  //アクティブなシートに存在する画像を取得
  let images = mySheet.getImages();
  //スプレッドシートから取得した画像の位置を変更
  images[0].setAnchorCell(mySheet.getRange(10,10));
  //スプレッドシートの画像サイズ(高さ)を変更
  images[0].setHeight(500);
  //スプレッドシートの画像サイズ(幅)を変更
  images[0].setWidth(700);
}

今回はシートが1つしかないので、アクティブなシートを取得した上で、getImagesで画像を取得します。

画像が1つしかないので、images[0]で指定した上で、位置変更とサイズ変更を実施します。

Google Apps Script(GAS)のgetImagesメソッドで画像を取得し、位置変更や高さ・幅変更を実行した結果

GASサンプルコードを実行すると、スプレッドシートが上記のように変化します。

画像の位置が変更され、画像サイズも指定したサイズに変更されています。

GASでシートへの画像挿入も可能

なお、Google Apps Script(GAS)では、シート上にある画像を取得するのと逆に、画像を挿入することもできます。

GASスクリプトで画像を挿入する場合、insertImageメソッドを使用します。

以下の記事でinsertImageメソッドを使ったシートへの画像挿入方法を解説しています。

シートから取得した画像はblob形式に変換不可

なお、Google Apps Script(GAS)のgetImagesメソッドでシートから取得した画像は、OverGridImageという型のオブジェクトです。

これは、通常GASで画像を扱う際のblob形式とは異なります。

スプレッドシートのシートから取得した画像を、GoogleドライブやGoogleドキュメントと連携するには、blob形式でなければなりません。

OverGridImage型の画像をblob形式に変換したいのですが、残念ながらOverGridImageにはblobに変換するメソッドは用意されていません。

そのため、シートからgetImagesメソッドで取得した画像は、シート上では画像操作ができるものの、他のサービスと連携ができない状態です。

同じ要望はGASのQ&Aサイト「Stack Overflow」でもありましたが、「不可能」とあり、Google側が改修するのを待つしかありません。

まとめ・終わりに

今回、Google Apps Script(GAS)でスプレッドシートのシート上にある画像を取得し、各種操作する方法を紹介しました。

GASのgetImagesメソッドを実行することで、シートに存在する画像を取得することができます。

overGridImageオブジェクトとして取得した画像は位置やサイズを変更したり、削除するといった操作が可能です。

ただ、blob形式では取得できず、overGridImage→blobに変換ができないため、シート上での操作にとどまります。

シートへの画像挿入と組み合わせることで、色々な利用方法ができるようになります。

シートで画像操作したい場合には、GASのgetImagesメソッドを活用しましょう。