Google Workspace割引クーポン無料配布中! 詳しくはこちら

【GAS】Googleドライブのフォルダ・ファイル一覧をまとめて取得する

  • URLをコピーしました!

ごすけ(@Gosuke5111)です。

今回は、Google Apps Script(GAS)を使ってGoogleドライブにある特定フォルダ内のフォルダ名・ファイル名・URLを取得してスプレッドシートに書き出す方法をご紹介します。

社長に『Googleドライブのフォルダにあるファイルをスプシに書き出して、更新があったものをメールで通知するようなGASを作ってほしい』と言われて作りました。

が、、、ちょっと躓きました。

フォルダーの取得とファイルの取得って、別の関数を使うみたいですね。

その備忘録も込めて、フォルダ・ファイル名を取得するGASコードを教えたいと思います。

この記事でわかること
  • Googleドライブに作成しているフォルダ・ファイル名・URLを取得するGASの紹介
  • GAS構築時に躓いたポイント

ではさっそくスプレッドシートの準備とGASコードをご紹介します。

タップできる目次
スポンサー

スプレッドシートの準備

まずはスプレッドシートの準備から。

以下のようなスプシを作りました。

1行目に検索したいフォルダIDを入力します。

4行目以降にフォルダ内で検索したファイル・フォルダを書き出すようにしました。

シート名は『子フォルダ』までとしています。

構成は以下の通りです。

1列目2列目3列目4列目
区分フォルダ・ファイル名URL最終更新日
フォルダかファイルを区別フォルダ・ファイルに付けられている名称割り当てられているリンク最後に更新された日付
スプレッドシートの割り当て

GASコードの全体像

次にGoogle Apps Script(GAS)のコード紹介です。

GASコード全体像

次にGoogle Apps Scriptのコードです。まずは全体像から。

function getFoldersAndFiles() {
  
  rowIndex = 4; // 書き出しのスタート行
  colIndex = 1; // 書き出しのスタート列
  
  const spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  const sheet = spreadsheet.getSheetByName('子フォルダまで'); //スプシの名称を記入
  let lastRow = sheet.getLastRow();
  let lastColumn = sheet.getLastColumn();
  if(lastRow > rowIndex){
    sheet.getRange(rowIndex,colIndex,lastRow-rowIndex+1,lastColumn-colIndex+1).clearContent();
  }

  const folderId = sheet.getRange(1,2).getValue();
  const folder = DriveApp.getFolderById(folderId);
  let newArray = []; //取得したフォルダ・ファイル名を保存する用
  
  //フォルダ名の取得
  const folders = DriveApp.getFolderById(folderId).getFolders();
  while(folders.hasNext()){
    const childFolder = folders.next();
    var folderName = childFolder.getName();
    var folderUrl = childFolder.getUrl()
    lastUpdatedDate = Utilities.formatDate(childFolder.getLastUpdated(), "JST", "yyyy/MM/dd HH:mm:ss");
    newArray.push(["フォルダ",folderName, folderUrl, lastUpdatedDate]);
  }

  //ファイル名の取得
  const files = folder.getFiles();
  let filesArray = [];
  while(files.hasNext()){
    
    let file = files.next();
    let fileName = file.getName(); // ファイル名
    let fileId = file.getId(); // ファイルID
    let fileURL = file.getUrl(); // ファイルURL
    let upDatedDay = Utilities.formatDate(file.getLastUpdated(),"JST", "yyyy/MM/dd HH:mm:ss")
    newArray.push(["ファイル",fileName,fileURL,upDatedDay]);
  }

  sheet.getRange(rowIndex, colIndex, newArray.length, newArray[0].length).setValues(newArray);

}

各コードの解説

各コードについて解説します。

初期設定

rowIndex = 4; // 書き出しのスタート行
colIndex = 1; // 書き出しのスタート列

const spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
const sheet = spreadsheet.getSheetByName('子フォルダまで'); //スプシの名称を記入

この部分では、情報を書き出すスプレッドシートの設定を行います。

rowIndexcolIndex により、どの行・列からデータを書き出すかを指定します。

例えば、4行目1列目から書き出しを開始する設定です。

また、spreadsheetsheet 変数を使って、現在のアクティブなスプレッドシートと特定のシート(この場合は「子フォルダまで」)を取得します。

シートのクリア処理

let lastRow = sheet.getLastRow();
let lastColumn = sheet.getLastColumn();
if(lastRow > rowIndex){
  sheet.getRange(rowIndex, colIndex, lastRow - rowIndex + 1, lastColumn - colIndex + 1).clearContent();
}

シート内のデータが残っている場合に備えて、開始行より下に存在するデータをクリアします。

lastRow はシートの最終行、lastColumn は最終列を取得します。

もし最終行が rowIndex より大きい場合は、その範囲をクリアしています。

フォルダの取得と初期化

const folderId = sheet.getRange(1, 2).getValue();
const folder = DriveApp.getFolderById(folderId);
let newArray = []; //取得したフォルダ・ファイル名を保存する用

スプレッドシートの特定のセルに保存されているフォルダIDを取得し、そのフォルダを操作するために DriveApp.getFolderById(folderId) を使用します。

また、後でフォルダやファイルの情報を格納するための配列 newArray を初期化します。

子フォルダの情報取得

const folders = DriveApp.getFolderById(folderId).getFolders();
while (folders.hasNext()) {
  const childFolder = folders.next();
  var folderName = childFolder.getName();
  var folderUrl = childFolder.getUrl();
  lastUpdatedDate = Utilities.formatDate(childFolder.getLastUpdated(), "JST", "yyyy/MM/dd HH:mm:ss");
  newArray.push(["フォルダ", folderName, folderUrl, lastUpdatedDate]);
}

指定されたフォルダ内に存在する子フォルダをループ処理で取得し、それぞれのフォルダ名、URL、最終更新日時を取得します。その情報を配列 newArray に追加していきます。

ファイルの情報取得

const files = folder.getFiles();
while (files.hasNext()) {
  let file = files.next();
  let fileName = file.getName(); // ファイル名
  let fileId = file.getId(); // ファイルID
  let fileURL = file.getUrl(); // ファイルURL
  let upDatedDay = Utilities.formatDate(file.getLastUpdated(), "JST", "yyyy/MM/dd HH:mm:ss")
  newArray.push(["ファイル", fileName, fileURL, upDatedDay]);
}

フォルダ内のファイル情報を取得しています。

フォルダの時と同様に、ファイル名、URL、最終更新日時を取得し、配列 newArray に追加します。

スプレッドシートへの書き込み

sheet.getRange(rowIndex, colIndex, newArray.length, newArray[0].length).setValues(newArray);

最後に、newArray に保存されたフォルダおよびファイル情報をスプレッドシートに一括で書き出します。

これにより、指定された位置からフォルダやファイルのリストが自動的に記録されます。

↑GASコード全体像へ戻る

躓いたポイント

今回躓いたのは以下の2つです。

  • フォルダ名の取得は『getFolders()』を使用する
  • ファイル名の取得は『getFiles()』を使用する

ずっと『getFolders()』を使っていて、「なんでファイルの方は取れんのや!!」と悶々としていました。

ファイル系(スプシ・ドキュメント・PDFなど)は『getFiles()』を使うようです。

なので、先ほどご紹介したGASコード

  • 最初に特定フォルダに入っている「フォルダ」を検索する
  • その後、特定フォルダに入っている「ファイル」を検索する

この順番で書き出すことで、フォルダもファイルも取得できるようになりました。

↑GASコード全体像へ戻る

まとめ

Google Apps Script(GAS)を使ってGoogleドライブにある特定フォルダ内のフォルダ名・ファイル名・URLを取得してスプレッドシートに書き出す方法をご紹介しました。

フォルダの取得は『getFolders()

ファイルの取得は『getFiles()

この2つを忘れないように記事にしたいと思います。

以上、ごすけでした。

ごすけ|生産技術者

1989年生まれの30代。妻と娘の3人家族。
大手メーカーからスタートアップ企業に転職。工程設計の仕事の傍ら、Google Workspaceを使って社内DXを推進中。
Google Workspaceの使い方・DX活用事例をブログで発信しています。

この記事が気に入ったら
フォローしてね!

よかったらシェアしてね!
  • URLをコピーしました!
タップできる目次