DX

GASでGoogleドライブの中でファイル検索とフォルダへの移動【DriveApp, hasNext, getFolderById, moveTo, getName, getUrl】

  • このエントリーをはてなブックマークに追加

「GASでファイル検索のような機能ができないか探している」
「ドライブの中で検索したいファイルがあるけどファイル名が固定になっていない」
「ファイル検索のやり方は知っているけど、特定のフォルダに移動させる方法を知りたい」

本日はそんな方に向けてGASを使ったファイル検索とフォルダへの移動について解説していきます。

ファイルの検索やフォルダの操作といったタスクを効率的に実行するには、DriveApp という便利なライブラリを利用することができます。

この記事ではDriveApp を使用して Google ドライブ内のファイルを検索し、特定のフォルダに移動させる方法について詳しく解説していきます。

さらに、 hasNext、getFolderById、moveTo、getName、getUrl などの DriveApp メソッドや関数を駆使して、スクリプトを効果的に活用する方法についても紹介します。

また動画もあるので良ければどうぞ。

GASでGoogleドライブの中をファイル検索する

まずはファイル検索から紹介します。

Googleドライブの中の作業に関する自動化をしたい場合、DriveAppというクラスを使うといろんなことができるようになります。

その中でもgetFilesByTypeというメソッドはファイルの種類を指定した上でファイル検索をしてくれるメソッドです。

例えばスプレッドシートを探したいときは以下のようにします。

function myFunction() {
  const files = DriveApp.getFilesByType("application/vnd.google-apps.spreadsheet");
}

初回の実行では承認を求められます。

「権限を確認」をクリックします。

ログインしているGmailアカウントが表示されますのでクリックしましょう。

こちら左下の「詳細」をクリックします。

こちらも左下にある「〜〜に移動」をクリックします。

最後にこちらの画面を「許可」をクリックすると実行します。

2回目以降は実行ボタンやデバックボタンを押せばすぐに実行されるようになります。

コードの内容に戻ります。

スプレッドシートの中でも特定のファイル名、もしくは固定のキーワードが含まれたファイル名を探したいときには以下のようにします。

候補のファイル群の中を検索する場合も繰り返し処理が使えるのですが、nextというメソッドが単体のファイルを順番に取り出すメソッドです。

そしてhasNextというメソッドが「ファイルがある間は繰り返し処理を続ける」というメソッドで、こちらをwhileループの引数に入れます。

そうするとスプレッドシートのファイルが無くなるまで、ファイルを1個ずつ取り出して検索するようになります。

function myFunction() {
  const files = DriveApp.getFilesByType("application/vnd.google-apps.spreadsheet");

  // ここを追加
  const prams = "テスト用シート";
  while (files.hasNext()) {
    let file = files.next();
    if(file.getName().indexOf(prams) != -1){
      let fileName = file.getName(); // ファイル名
      let fileId = file.getId(); // ファイルID
      let fileURL = file.getUrl(); // ファイルURL
      console.log([fileName,fileId,fileURL]);
      return fileURL;
    }else{
      return false;
    }
  }
}

ファイル名、もしくはキーワードを変数pramsとしてindexOfメソッドで検索します。

indexOfはJavaScriptのメソッドで該当する条件に対して結果が見つかった時は0以上の数字を返して、見つからなかった時は-1を返すものです。

またファイルごとの情報については、getNameでファイル名、getIdでファイルID、getUrlでファイルのURLを取得することができます。

上記コードではそれぞれをconsole.logで出力していましたので以下のようになります。

GASで検索したファイルを特定のフォルダに移動する

続いて見つかったファイルを特定のフォルダに移動させてみます。

移動させたいフォルダのIDが必要になります。

フォルダのURLで「https://drive.google.com/drive/folders/xxxxxxxxxxxxxxxx」で「xxxx」となっている部分がIDになりますのでコピーして以下のようにします。

function myFunction() {
  const files = DriveApp.getFilesByType("application/vnd.google-apps.spreadsheet");

  const prams = "テスト用シート";
  while (files.hasNext()) {
    let file = files.next();
    if(file.getName().indexOf(prams) != -1){
      let fileName = file.getName(); // ファイル名
      let fileId = file.getId(); // ファイルID
      let fileURL = file.getUrl(); // ファイルURL
      console.log([fileName,fileId,fileURL]);

      // ここを追加
      let toFolder = DriveApp.getFolderById("xxxxxxxxxxxxxxxxxx");
      file.moveTo(toFolder);

      return fileURL;
    }else{
      return false;
    }
  }
}

DriveApp.getFolderByIdというメソッドは引数に入れたフォルダIDを元にフォルダの場所を取得してくれます。

またmoveToというメソッドの引数に移動先のフォルダを入れることで、moveToを実行したファイルを移動させることができます。

GASを使うといろんなサービスと連携できますのでアイデアを膨らましていきましょう。

また今回参考にした本はこちらになります。

良ければどうぞ。

  • このエントリーをはてなブックマークに追加