2022/09/13に更新

【GASで時短】ファイルの親フォルダを調べる

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

シートに記載したファイルURLを元に、親フォルダの名前とURLを出力するGoogle Apps Scriptです。

こんな悩みを解決します


  • ファイルがどこに保存されているか調べたいが、ドライブの「ファイルの詳細」を1個ずつ見るのは面倒

用意するもの


スプレッドシートがあればOKです。

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


  • A列に書き込まれたファイルのURLを元に、その親フォルダを調べてシートに書き込みます。
  • フォルダのURLにも対応しているので、フォルダの親フォルダも調べられます。

使い方


1.スクリプトの実行

このスクリプトが期待するシートの構造は、このようになっています。
A列に調べたいファイルのURLを入力しておきます。
1行目は項目名としてスキップしますので、2行目から入力してください。

上のメニューにある「スクリプト実行」から「ファイルの親フォルダを出力する」を実行します。

2.結果の確認

B列にフォルダ名が、C列にフォルダのURLが書き出されます。
3行目が「取得できませんでした」となっていますが、これは調べたいURLとして「マイドライブ」を指定していました。
マイドライブの親フォルダは存在しませんので、このような結果になっています。

3.注意点

一般的なGoogleのファイル(ドキュメント、スライド、スプレッドシート等)とフォルダに対応しているはずですが、もし取れないものがあれば40行目からのIDを取得する部分を修正してみてください。

1ファイルごとにシートに結果を書き出しているので、大量にファイルがある場合は時間がかかるかもしれません。短縮したい場合は書き込みデータを配列にまとめ、セルにsetValues()することをおすすめします。

スクリプト


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

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

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

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

  // メニューに追加するボタン
  menu.addItem('ファイルの親フォルダを出力する', 'export_parents_folder');

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


function export_parents_folder() {

  // 開いているスプレッドシートオブジェクトを取得
  const ss = SpreadsheetApp.getActiveSpreadsheet();

  // 開いているシートを取得
  const sheet = ss.getActiveSheet();

  // シートに書き込まれている内容(ファイル、フォルダのURL)を取得
  const values = sheet.getRange(1, 1, sheet.getLastRow(), sheet.getLastColumn()).getValues();

  // URLの数だけループ。1行目は項目名なので開始値は1とする。
  for (let i = 1; i < values.length; i++) {

    try {

      // A列にあるURLを取得
      let file_url = values[i][0];

      // ファイルのID格納用の変数
      let file_id;

      // フォルダとファイルでURLの構造が違うため、条件分岐してIDを取得する
      if (file_url.match(/folders/)) {

        // フォルダの場合
        file_id = file_url.match(/^.*\/folders\/(.*)$/)[1];

      } else {

        // ファイルの場合
        file_id = file_url.match(/^.*\/d\/(.*)\/.*$/)[1];

      }

      // IDからファイルを取得する
      let file = DriveApp.getFileById(file_id);

      // 親フォルダの要素を取得する
      let parents = file.getParents();

      // 親フォルダを取得する
      let folder = parents.next();

      // フォルダ名を取得する
      let folder_name = folder.getName();

      // フォルダのURLを取得する
      let folder_url = folder.getUrl();

      // 結果を書き込む先のセル範囲を定義。ファイルURLと同じ行のB列とC列。
      let range = sheet.getRange(i + 1, 2, 1, 2);

      // セルに結果を書き込む
      range.setValues([[folder_name, folder_url]]);

    } catch (e) {

      let range = sheet.getRange(i + 1, 2);
      range.setValue('取得できませんでした');

      continue;
    }

  }
}

関連するアプリ


【GASで時短】ファイル名に文字列を追加する

指定したフォルダ内のすべてのファイルに、プレフィックス(接頭辞)を付与するGoogle Apps Scriptです。例えばスマホで撮影した写真のファイル名に「yyyy/mm/dd 運動会_元のファイル名.jpg」のように変更することができます。

【GASで時短】ファイル名の一部を削除する

フォルダ内のすべてのファイルを対象に、ファイル名の一部を消すことが出来るGoogle Apps Scriptです。ドライブでファイルのコピーをすると「のコピー」が付与されますがこのような文字列を消すことができます。

【GASで時短】ファイル名に作成日を追加する

ファイル名の先頭にファイルの作成日を追加するGoogle Apps Scriptです。ドライブのファイル一覧で表示されるのは「最終更新日」だけで、作成日は各ファイルをクリックして右ペインを見ないとわかりません。わからないならファイル名に追加してしまおうというスクリプトです。「yyyy-mm-dd_元のファイル名」のように変えることができます。

【GASで時短】更新からN時間以上経過したファイルを削除する

最終更新日時からN時間以上経過したファイルを削除するGoogle Apps Scriptです。GASが自動的に吐き出すログファイルや、不要なファイルの一括削除に使えます。「削除」といってもゴミ箱へ移動する処理なので、誤って実行しても復元が可能です。

【GASで時短】ドライブのファイルリストをスプレッドシートに出力する

指定したGoogle ドライブのファイル一覧をスプレッドシートに出力するGoogle Apps Scriptです。最終更新日時やオーナー、URLも出力するのでフォルダ整理する時に使えるかも。

【GASで時短】ファイルを指定回数コピーする

指定したファイルを指定した回数だけコピーするGoogle Apps Scriptです。テンプレートを受講者分コピーしたいときなどに。

【GASで整理】ドライブ上の同名のファイルを検索する

Googleドライブ上でファイル名が重複しているものを探すGoogle Apps Scriptです。同じ名前のファイルに苦しめられている方、いかがですか?

【GASで時短】再帰的にドライブフォルダ内のファイルリストを出力する

指定したGoogle ドライブのファイル一覧をスプレッドシートに出力するGoogle Apps Scriptです。子フォルダ(サブフォルダ)も再帰的に探して一覧を出力します。

タグ一覧

最新のアプリ

人気のアプリ

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