2022/08/07に更新

【GASで整理】ドライブにある画像ファイルをシートに出力する

ドライブスプレッドシート

指定したフォルダに入っている画像を、スプレッドシートのセルに反映するGoogle Apps Scriptです。画像もシート上に表示しますので画像の整理やレビューをするときに役立つかも。

こんな悩みを解決します


  • ドライブにある画像ファイルをスプレッドシートに出力したい
  • ファイル名だけではわかりにくいので、画像もシートに表示したい

用意するもの


特にありません。スプレッドシートがあればOKです。

このスクリプトで出来ること


  • 特定のGoogleドライブのフォルダにある画像ファイルを、スプレッドシートに書き出すことが出来ます。
  • 画像のサムネイルもセルに表示してくれます。

使い方


1.事前準備

スプレッドシートに画像を表示するためには、「リンクを知っている全員」に閲覧(以上の)権限が無いと動作しません。
対象のフォルダの共有権限を変更しておきましょう。

今回テストした環境は、フォルダもスプレッドシートも同じアカウントがオーナーだったんですがそれだけでは画像が表示されませんでした。
オーナーは関係なく、共有設定を「リンクを知っている全員」にしないとダメみたいです。

次に画像が保存されているフォルダのURLをコピーしておきましょう。

2.スクリプトの実行

事前準備が終わったので、さっそく実行してみましょう。
上のメニューにある「スクリプト実行」から「ドライブの画像リストを取得する」を実行します。

対象のフォルダURLを聞かれますので、事前準備でコピーしておいたURLを入力してOKを押します。

3.結果の確認

処理が終わると「処理が完了しました!」とメッセージが表示されます。

アクティブなシートに、ファイル名と画像が追記されています。
appendRow()で1行ずつ追記していますので、ファイルが大量にあって6分を超えてしまう場合はsetValues()に書き換えてみてください。

スクリプト


/**
 * このスクリプトの説明、使い方はこちら。
 * https://myfunc.jp/items/00127/index.html
 */

function onOpen() {
  // スプレッドシートを開いたときに実行される関数

  // UIの取得
  const ui = SpreadsheetApp.getUi()

  // メニューの表示名
  const menu = ui.createMenu('スクリプト実行');

  // メニューに追加するボタン
  menu.addItem('ドライブの画像リストを取得する', 'get_drive_images');

  // メニューを画面に追加する
  menu.addToUi();
}


function get_drive_images() {

  // UIオブジェクトを取得
  let ui = SpreadsheetApp.getUi();

  // 画像が保存されているドライブのURLを入力してもらう
  const input = ui.prompt('URLを入力してください', '画像が保存されているGoogleドライブのフォルダのURLを入力してください', ui.ButtonSet.OK_CANCEL);

  // キャンセルが押されたら終了
  if (input.getSelectedButton() == ui.Button.CANCEL) {
    return;
  }

  // 入力されたURLからフォルダのIDを取得する
  const url_drive_id = input.getResponseText().match(/https:\/\/drive.google.com\/drive\/folders\/(.*)$/)[1];

  // フォルダを取得
  const folder = DriveApp.getFolderById(url_drive_id);

  // フォルダからファイルを取得
  const files = folder.getFiles();

  // アクティブなスプレッドシートオブジェクトを取得
  const ss = SpreadsheetApp.getActiveSpreadsheet();

  // アクティブなシートを取得
  const sheet = ss.getActiveSheet();

  // ファイルを取り出し終わるまでループ
  while (files.hasNext()) {

    // ファイルを取得
    let file = files.next();

    // MIMEタイプがimageではないものは処理しない
    if (!file.getMimeType().match(/image/)) {
      continue;
    }

    // 画像ファイルの名前を取得
    let file_name = file.getName();

    // 画像ファイルのIDを取得
    let file_id = file.getId();

    // ファイルのURLを組み立てる。共有権限が「URLを知っている人がアクセス可能」でないと取得できない。
    let file_url = "https://drive.google.com/uc?export=download&id=" + file_id;

    // image関数で呼び出すため、数式を組み立てる
    let formula = '=image("' + file_url + '")';

    // シートに追記する
    sheet.appendRow([file_name, formula]);

  }

  ui.alert("処理が完了しました!");

}

関連するアプリ


タグ一覧

最新のアプリ

人気のアプリ

ページトップに戻る
myfunc.jp