【GAS】フォルダ内のファイルのidを一括で取得する

pc-on-office プログラミング

GASを使用するとき、ほかのファイルと連携するにはそのファイルのidが必要になります。

1つや2つのファイルの場合は、個別に見ていけばいいですが、対象のファイル数が多くなれば一つ一つ確認するのは大変です。

そういうときに、使えるGASを紹介します。

idを一括取得する方法

フォルダー内にあるファイルの一覧を取得し、それをスプレッドシートに書き出します。

今回のファイル構成は次のようになっています。

getid-folder
  • id取得フォルダ:idを取得したいファイルが保存されているフォルダ
  • id取得:今回のメインとなるidを取得するためのスクリプトファイル(GAS)
  • id取得スプレッドシート:idを書き出すためのスプレッドシート

idを取得したいファイルが保存されている「id取得フォルダ」には、次の3つのファイルがあります。

getid-files

この3つのファイルのidを取得して、そのidをスプレッドシートに書き出します。

今回作成するGASでは、2つの関数を作成します

  1. ファイルのidを取得して配列に格納
  2. idを格納した配列をスプレッドシートに書き出し

ファイルのidを取得する

id取得スクリプトファイルに、次のスクリプトを書きます。

フォルダ内のファイルのidを取得するスクリプトです。

//idを取得する関数式
const getFileId = () => {
  //idを取得するフォルダの指定
  const folderId = DriveApp.getFolderById("取得するフォルダのidをここに書く");
  //指定したフォルダ内のすべてのファイルを格納
  const files = folderId.getFiles();

  //データを格納する配列の宣言
  const arr = [];

  //2次元配列として追加
  //フォルダ内のすべてのファイルについて実行
  while (files.hasNext()) {
    //すべてのファイルから1つ取り出し
    const file = files.next();
  
    //配列にファイルのデータを追加
    //getName:ファイルの名前、getId:ファイルのID、getUrl:ファイルのURL
    arr.push([file.getName(),file.getId(),file.getUrl()]);
  }

  //データを格納した配列arrの確認
  console.log(arr);
};

4行目には、取得するフォルダのidを記載します。以下のスクリプトの「”取得するフォルダのidをここに書く”」の部分を書きかえてください。

//idを取得するフォルダの指定
const folderId = DriveApp.getFolderById("取得するフォルダのidをここに書く");

取得するフォルダのidは、フォルダを開いたときのURLで確認します。

getid-folderid

URLが「https://drive.google.com/drive/folders/123456789」だったとしたら、4行目のスクリプトは次のように変更してください。

//idを取得するフォルダの指定
const folderId = DriveApp.getFolderById("123456789");

getFileIdを実行します。実行は、関数を選択して、三角ボタンをクリックします。

getid-done

初めて実行する場合は、承認が必要になります。

承認方法
  1. 「承認が必要です」というウインドウで、「権限を確認」をクリック
  2. Googleアカウントでログイン
  3. 「このアプリはGoogleで確認されていません」の左下の詳細をクリック
  4. 「(GASの名前)(安全ではないページ)に移動」をクリック→「許可」

実行したら、画面下部にログが表示されます。

ログには、データを格納している配列arrが表示されます。arrには、2次元配列として、データが格納されています。

[
  [ 'スプレッドシート', 'スプレッドシートのid', 'スプレッドシートのURL' ],
  [ 'スライド', 'スライドのid', 'スライドのURL' ],
  [ 'ドキュメント', 'ドキュメントのid', 'ドキュメントのURL' ]
]

idとURLは、実際のファイルのものが表示されているはずです。

取得したidをスプレッドシートに書き込む

フォルダ内のすべてのファイルのidが取得できました。

そのデータをスプレッドシートに書き込みます。

//idを取得する関数式
const getFileId = () => {
  //idを取得するフォルダの指定
  const folderId = DriveApp.getFolderById("取得するフォルダのidをここに書く");
  //指定したフォルダ内のすべてのファイルを格納
  const files = folderId.getFiles();

  //データを格納する配列の宣言
  const arr = [];

  //2次元配列として追加
  //フォルダ内のすべてのファイルについて実行
  while (files.hasNext()) {
    //すべてのファイルから1つ取り出し
    const file = files.next();
  
    //配列にファイルのデータを追加
    //getName:ファイルの名前、getId:ファイルのID、getUrl:ファイルのURL
    arr.push([file.getName(),file.getId(),file.getUrl()]);
  }

  //データを格納した配列arrをスプレッドシートに書き込む
  setData(arr);
};

//スプレッドシートに書き込む関数式
const setData = arr => {
  //書き込むスプレッドシートのid
  const ss = SpreadsheetApp.openById("書き込むスプレッドシートのidをここに書く");
  //スプレッドシートのシート名
  const sheet = ss.getSheetByName("書き込むスプレッドシートのシート名をここに書く"); 
  
  //シートの値クリア
  sheet.clearContents();
  
  //取得したIDの貼り付け
  sheet.getRange(1,1,arr.length,arr[1].length).setValues(arr);
};

先ほどのコードに、スプレッドシートへの書き込む関数式を追加しました。

それに合わせて23行目のconsole.log(arr)をsetData(arr)に書き換えています。

関数式getFileIdで取得した2次元配列arrを、関数式setDataに渡しています。

setDataは、指定したスプレッドシートのシートをクリアした後、受け取った2次元配列をシートに書き込みます。

スプレッドシートに書き込むためには、スプレッドシートのidとシート名を指定する必要があるので、29行目にスプレッドシートのid、31行目にシート名を書き込んでください。

getid-spreadsheet

getFileIdを実行すれば、指定したスプレッドシートにidが書き出されます。

スプレッドシートの書き込みについては、次の記事を参考にしてください。

まとめ

GASでファイルのidが必要になったときに、複数のファイルのidを一括取得し、スプレッドシートに書き込む方法を紹介しました。

これを使用することで、ファイルの数が何個あっても、一気にidを取得することができます。

GASを使えば、メールを自動で送信することやLINEと連携したアプリなどを作ることができます。

みなさんもGASで便利なアプリを作ってみませんか。

タイトルとURLをコピーしました