ADVERTISEMENT

【Googleスプレッドシート】Apps Scriptで画像のbase64エンコード!データURI化の手順

【Googleスプレッドシート】Apps Scriptで画像のbase64エンコード!データURI化の手順
🛡️ 超解決

Googleスプレッドシートに画像を表示したいけれど、セルに直接画像を貼り付けるとサイズが合わなかったり、他のアプリでURLとして利用できないことに悩んでいませんか。実は、画像をBase64形式に変換してデータURIにすることで、スプレッドシート内で画像をテキストとして扱えるようになります。この記事では、Apps Scriptを使って画像のBase64エンコードを行い、データURI化する手順を詳しく解説します。

【要点】Apps Scriptで画像をデータURIに変換する3ステップ

  • Utilities.base64Encode() 関数: 画像Blobを引数として渡すことで、Base64文字列に変換します。
  • データURI形式の構築: 変換したBase64文字列の先頭に「data:image/png;base64,」のようなMIMEタイプを連結してデータURIを作ります。
  • IMAGE関数でスプレッドシートに表示: 作成したデータURIを=IMAGE(“dataURI”)でセルに表示できます。

ADVERTISEMENT

画像のBase64エンコードが必要な理由とデータURIの仕組み

スプレッドシートでは、画像をセル内に直接埋め込むと、表示位置がずれたり、印刷やエクスポート時に問題が起きることがあります。また、画像を外部URLとして扱いたい場合も、画像が共有フォルダにないと利用できません。画像をBase64エンコードしてデータURIに変換すれば、画像データそのものを文字列としてセルに保存できます。これにより、画像のリンク切れを防ぎ、IMEAGE関数や他のセルから参照しやすくなります。

データURIは、画像データを直接HTMLやCSSに埋め込むための形式で、スプレッドシートのIMAGE関数でも利用できます。Base64はバイナリデータをテキストに変換するエンコード方式で、画像ファイルをテキストとして扱えるようにします。

Apps Scriptで画像をBase64エンコードしてデータURI化する手順

ここでは、Googleドライブに保存されている画像ファイルを読み込み、Base64エンコードしてデータURIを作成し、スプレッドシートに表示する手順を説明します。前提として、画像はGoogleドライブ上にあり、ファイルIDがわかっている状態とします。

手順1: 画像ファイルをBlobとして取得する

  1. スクリプトエディタを開く
    Googleスプレッドシートを開き、メニューの「拡張機能」から「Apps Script」を選択します。
  2. 画像ファイルのIDを取得する
    Googleドライブで対象の画像ファイルを開き、URLの「/d/」と「/view」の間にある英数字の文字列がファイルIDです。
  3. DriveAppでファイルを取得する
    スクリプト内で var file = DriveApp.getFileById('ファイルID'); と記述してファイルを取得します。
  4. Blobとして取り出す
    var blob = file.getBlob(); で画像データのBlobを取得します。このBlobがBase64エンコードの対象です。

手順2: BlobをBase64エンコードしてデータURIを作成する

  1. Base64に変換する
    var base64 = Utilities.base64Encode(blob); と記述します。これでBlobの内容がBase64文字列になります。
  2. MIMEタイプを取得する
    var mimeType = blob.getContentType(); で画像のMIMEタイプ(例:image/png)を取得します。
  3. データURIを組み立てる
    var dataUri = 'data:' + mimeType + ';base64,' + base64; のように連結します。これでデータURI文字列が完成します。

手順3: データURIをスプレッドシートに出力する

  1. セルにデータURIを書き込む
    SpreadsheetApp.getActiveSheet().getRange('A1').setValue(dataUri); と記述して、A1セルにデータURIをテキストとして入れます。
  2. IMAGE関数で画像として表示する
    別のセル(例:B1)に =IMAGE(A1) と入力します。すると、A1のデータURIが画像として表示されます。
  3. スクリプトを実行する
    エディタで関数を選択し、実行ボタンをクリックします。初回は権限の承認が必要です。

Base64エンコードでよくある注意点とトラブル対策

画像が大きすぎてエラーになる場合

Base64エンコードは元のデータサイズが約33%増加します。スプレッドシートのセルには文字数制限(約5万文字)があるため、大きな画像ではエラーが起きることがあります。200KB以下の画像を推奨します。それ以上の画像は圧縮してからエンコードしてください。

MIMEタイプが正しく取得できない

blob.getContentType()が正常に返さない場合があります。その場合はファイルの拡張子から手動でMIMEタイプを指定します。例えばPNGなら「image/png」、JPEGなら「image/jpeg」です。

データURIが長すぎてIMAGE関数で表示されない

IMAGE関数の引数として渡せる文字数には制限があります。あまりに長いデータURIは表示されません。その場合は画像を分割するか、Googleドライブの公開リンクを使う方法も検討しましょう。

スクリプトの実行権限とトリガーの設定

スクリプトを初めて実行するとき、権限の承認画面が表示されます。「Drive」へのアクセス許可が必要です。定期的に画像を更新したい場合は、時間主導型トリガーを設定して自動実行させることもできます。

ADVERTISEMENT

Base64エンコードと外部URLの比較

項目 Base64データURI 外部画像URL
リンク切れのリスク なし(データがセル内にあるため) あり(サーバー削除など)
セル内の文字数制限 小さい画像に限定される ほぼ制限なし
オフラインでの表示 可能(データを保持) 不可能(インターネット必須)
処理速度 変換に時間がかかるが表示は速い 読み込みにネットワーク時間が必要
プライバシー 他者との共有時にデータが渡る URLを知られると閲覧可能

まとめ

Apps Scriptを使うことで、画像をBase64エンコードしてデータURIに変換し、スプレッドシート内に埋め込めるようになります。これにより、外部リンクに依存せず、セル内で画像を管理できる利点があります。より大きな画像を扱う場合は、Googleドライブの公開リンクやIMPORTDATA関数との組み合わせも検討してみてください。データURI化の応用として、HTMLメールの署名に画像を埋め込むなど、他の用途にも活用できます。


ADVERTISEMENT

この記事の監修者
✍️

超解決 第一編集部

疑問解決ポータル「超解決」の編集チーム。正確な検証と、現場視点での伝わりやすい解説を心がけています。