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として取得する
- スクリプトエディタを開く
Googleスプレッドシートを開き、メニューの「拡張機能」から「Apps Script」を選択します。 - 画像ファイルのIDを取得する
Googleドライブで対象の画像ファイルを開き、URLの「/d/」と「/view」の間にある英数字の文字列がファイルIDです。 - DriveAppでファイルを取得する
スクリプト内でvar file = DriveApp.getFileById('ファイルID');と記述してファイルを取得します。 - Blobとして取り出す
var blob = file.getBlob();で画像データのBlobを取得します。このBlobがBase64エンコードの対象です。
手順2: BlobをBase64エンコードしてデータURIを作成する
- Base64に変換する
var base64 = Utilities.base64Encode(blob);と記述します。これでBlobの内容がBase64文字列になります。 - MIMEタイプを取得する
var mimeType = blob.getContentType();で画像のMIMEタイプ(例:image/png)を取得します。 - データURIを組み立てる
var dataUri = 'data:' + mimeType + ';base64,' + base64;のように連結します。これでデータURI文字列が完成します。
手順3: データURIをスプレッドシートに出力する
- セルにデータURIを書き込む
SpreadsheetApp.getActiveSheet().getRange('A1').setValue(dataUri);と記述して、A1セルにデータURIをテキストとして入れます。 - IMAGE関数で画像として表示する
別のセル(例:B1)に=IMAGE(A1)と入力します。すると、A1のデータURIが画像として表示されます。 - スクリプトを実行する
エディタで関数を選択し、実行ボタンをクリックします。初回は権限の承認が必要です。
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
超解決 第一編集部
疑問解決ポータル「超解決」の編集チーム。正確な検証と、現場視点での伝わりやすい解説を心がけています。
Googleスプレッドシートの人気記事ランキング
- 【Googleスプレッドシート】GOOGLEFINANCE関数で株価・為替を取得!リアルタイムデータの呼び出し
- 【Googleスプレッドシート】印刷範囲を指定して印刷!特定範囲だけPDFや紙に出す手順
- 【Googleスプレッドシート】新しいスプレッドシートを作成する3つの方法!ドライブ・URL・テンプレート
- 【Googleスプレッドシート】数値の連続データを自動入力!オートフィルの活用
- 【Googleスプレッドシート】ダークモードを有効にする!目に優しい配色への切替
- 【Googleスプレッドシート】株価APIで株式データを自動取得!GOOGLEFINANCE超え活用
- 【Googleスプレッドシート】共有相手が編集できない時のチェック!権限と許可状態の確認
- 【Googleスプレッドシート】ページ設定で用紙サイズと向きを調整!印刷レイアウトの基本
- 【Googleスプレッドシート】Excelファイルxlsxをインポートする手順!ドラッグ&ドロップで取り込み
- 【Googleスプレッドシート】条件付き書式をコピーする!書式のみペーストの活用
