Googleスプレッドシートで複数枚の画像をまとめて挿入する方法【GAS活用】

「GoogleスプレッドシートでもExcelみたいにまとめて画像を挿入できたら便利なのに…」と思ったことはありませんか?

Excelでは画像を複数選択して一括挿入できますが、Googleスプレッドシートの標準機能では1枚ずつ手動で追加しなければなりません。

画像の枚数が多いと作業も大変になってきます。

そこで今回は、Google Apps Script を活用してGoogleスプレッドシートに複数の画像を一括挿入する方法をご紹介します。

今回のGASを使えば画像挿入作業を効率化し、業務の生産性をアップできます。

目次

完成イメージ

  • 選択したセルから画像を1行ずつセル内に挿入
  • Googleドライブのフォルダを指定して一括処理

Googleドライブ内にある画像を使って、スプレッドシート内にセル内画像として一括挿入します。

手順

STEP
Googleドライブに画像をアップロード

GASによる画像一括挿入では、Google ドライブ内にある画像を使用します。

そのため、Googleドライブに画像保存用の新しいフォルダを作成します。(好きな名前で作成)

その後、作成したフォルダに画像ファイル(PNG, JPG, GIF) をアップロードします。

STEP
スプレッドシートで画像挿入したいセルを選択

セル内画像として挿入するため、挿入先のセルを選択します。

選択したセルを基準に、1行ずつ下に画像が挿入されます。

STEP
GASエディタを開く

Googleスプレッドシートを開き、メニューの「拡張機能」から「Apps Script」をクリックしてGASエディタを開きます。

STEP
スクリプトの作成

function myFunction(){

}

が最初から入っているため、消去して以下のスクリプトを貼り付けます。

function showFolderInputDialog() {
  var ui = SpreadsheetApp.getUi();
  var response = ui.prompt("GoogleドライブのフォルダIDまたはフォルダ名を入力してください:");
  if (response.getSelectedButton() == ui.Button.OK) {
    var folderInput = response.getResponseText();
    insertImagesFromDrive(folderInput);
  }
}

function insertImagesFromDrive(folderInput) {
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  var folder = getFolderByIdOrName(folderInput);
  if (!folder) {
    SpreadsheetApp.getUi().alert("指定されたフォルダが見つかりません。");
    return;
  }
  var files = folder.getFiles();
  var range = sheet.getActiveRange();
  var startRow = range.getRow();
  var col = range.getColumn();
  var supportedFormats = ["image/png", "image/jpeg", "image/gif"];
  var row = startRow;
  while (files.hasNext()) {
    var file = files.next();
    var mimeType = file.getMimeType();
    if (supportedFormats.includes(mimeType)) {
      try {
        var publicUrl = getPublicImageUrl(file);
        if (publicUrl) {
          sheet.getRange(row, col).setFormula(`=IMAGE("${publicUrl}")`);
          row++;
        }
      } catch (e) {
        Logger.log("Error processing file: " + file.getName() + " - " + e.toString());
      }
    }
  }
}

function getFolderByIdOrName(folderInput) {
  try {
    return DriveApp.getFolderById(folderInput);
  } catch (e) {
    var folders = DriveApp.getFoldersByName(folderInput);
    return folders.hasNext() ? folders.next() : null;
  }
}

function getPublicImageUrl(file) {
  try {
    file.setSharing(DriveApp.Access.ANYONE_WITH_LINK, DriveApp.Permission.VIEW);
    return "https://drive.google.com/uc?id=" + file.getId();
  } catch (e) {
    Logger.log("Failed to set sharing for file: " + file.getName() + " - " + e.toString());
    return null;
  }
}
スクリプトの説明
ダイアログ表示でGoogleドライブのフォルダIDまたはフォルダ名を入力
function showFolderInputDialog() {
  var ui = SpreadsheetApp.getUi();
  var response = ui.prompt("GoogleドライブのフォルダIDまたはフォルダ名を入力してください:");
  if (response.getSelectedButton() == ui.Button.OK) {
    var folderInput = response.getResponseText();
    insertImagesFromDrive(folderInput);
  }
}
  • SpreadsheetApp.getUi().prompt() を使って、ユーザーにフォルダの指定を求めます。
  • OKボタンを押すと、insertImagesFromDrive(folderInput) を実行 し、入力したフォルダの画像を処理します。
指定フォルダの画像を取得し、選択したセルを基準に1行ずつ挿入
function insertImagesFromDrive(folderInput) {
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  var folder = getFolderByIdOrName(folderInput);
  
  if (!folder) {
    SpreadsheetApp.getUi().alert("指定されたフォルダが見つかりません。");
    return;
  }
  
  var files = folder.getFiles();
  var range = sheet.getActiveRange();
  var startRow = range.getRow();
  var col = range.getColumn();
  var supportedFormats = ["image/png", "image/jpeg", "image/gif"];

  var row = startRow;

  while (files.hasNext()) {
    var file = files.next();
    var mimeType = file.getMimeType();
    
    if (supportedFormats.includes(mimeType)) {
      try {
        var publicUrl = getPublicImageUrl(file);
        
        if (publicUrl) {
          sheet.getRange(row, col).setFormula(`=IMAGE("${publicUrl}")`);
          row++;
        }
      } catch (e) {
        Logger.log("Error processing file: " + file.getName() + " - " + e.toString());
      }
    }
  }
}
  • getFolderByIdOrName(folderInput) を使って、フォルダIDかフォルダ名で該当のフォルダを探します。
  • sheet.getActiveRange() を使い、ユーザーが選択したセルの行 (startRow) と列 (col) を取得します。ここを基準に画像を順番に挿入します。
  • getFiles() を使い、フォルダ内の全ファイルを取得します。
  • getPublicImageUrl(file) を使って、画像を 「リンクを知っている全員が閲覧可」 に設定します。
  • Googleドライブの uc?id=FILE_ID の形式でURLを取得します。
  • sheet.getRange(row, col).setFormula("=IMAGE('URL')") を使い、スプレッドシートのセル内に画像を埋め込みます。
  • row++ を実行して 次の行に移動 しながら画像を順番に挿入します。
フォルダIDまたはフォルダ名でGoogleドライブのフォルダを取得
function getFolderByIdOrName(folderInput) {
  try {
    return DriveApp.getFolderById(folderInput);
  } catch (e) {
    var folders = DriveApp.getFoldersByName(folderInput);
    return folders.hasNext() ? folders.next() : null;
  }
}
  • DriveApp.getFolderById(folderInput) を試し、フォルダIDとして有効ならそのフォルダを返します。
  • IDが無効なら、フォルダ名で検索し、最初に見つかったフォルダを返します。
  • どちらも見つからなければ null を返します。
Googleドライブの画像を「公開」にし、そのURLを取得
function getPublicImageUrl(file) {
  try {
    file.setSharing(DriveApp.Access.ANYONE_WITH_LINK, DriveApp.Permission.VIEW);
    return "https://drive.google.com/uc?id=" + file.getId();
  } catch (e) {
    Logger.log("Failed to set sharing for file: " + file.getName() + " - " + e.toString());
    return null;
  }
}
  • file.setSharing(DriveApp.Access.ANYONE_WITH_LINK, DriveApp.Permission.VIEW);でファイルの公開設定を「リンクを知っている全員が閲覧可」に変更します。
  • これにより、画像を手動で公開設定する必要がなくなります。
  • Googleドライブの uc?id=FILE_ID の形式でURLを取得します。
  • この形式を使えば、=IMAGE("URL") でスプレッドシート内に画像を直接表示可能です。
STEP
スクリプトを保存

スクリプトを書いたら、好きな名前を付けて保存します。

(例:「画像一括挿入」)

STEP
スクリプトを実行

スクリプトを実行すると、Googleドライブ内のフォルダから画像をまとめて挿入します。

初めてそのスクリプトを実行する場合は権限の確認が必要です。

そのため、『権限を確認』を押します。

許可の詳細手順

「詳細」をクリックします。

無題のプロジェクト(安全ではないページ)に移動」をクリックします。

許可」をクリックします。

STEP
GoogleドライブのフォルダIDまたはフォルダ名を入力

スクリプトを実行すると、画像フォルダを指定するためのダイアログボックスが表示されます。

フォルダIDもしくはフォルダ名を入力します。

入力後、「OK」をクリックします。

STEP
セル内に画像が一括挿入される

選択したセルを基準に、1行ずつセル内に画像が挿入されます。

GAS実行時の注意事項

  • 対応フォーマットは PNG, JPG, GIF のみ
    → PDFやSVGは非対応です
  • Googleドライブの画像を「公開」にする必要がある
    → 今回のスクリプトでは自動で設定を「公開」に変更します
  • 大量の画像を処理するとGoogle Drive APIの制限にかかる
    → 50枚を超えるなど画像が大量にある場合は、分割して実行が必要です

GASで一括画像挿入のメリット・デメリット

メリットデメリット
手作業不要で画像を一括挿入できる
選択したセルを基準に1行ずつ挿入可能
Google Drive APIで自動的に画像の公開設定を変更
Googleドライブに画像をアップロードする手間がある
Google Drive API の制限に注意が必要

まとめ

Google Apps Script (GAS) を活用することで、Googleスプレッドシートで画像の一括挿入が可能となります。

事前準備として画像をGoogleドライブにアップロードする手間がありますが、手作業で一つずつ画像挿入するのと比べて作業効率がアップします。

セル内画像の挿入をまとめて行いたい時に今回のGASをご活用ください。

弊社では、Google Apps Script(GAS)を活用した業務効率化のサポートを提供しております。

GASのカスタマイズやエラー対応にお困りの際は、ぜひお気軽にご相談ください。

また、ITツールの導入支援やIT導入補助金の申請サポートも行っております。

貴方の業務改善を全力でサポートいたします。

お問い合わせはこちら

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

目次