スキルアップを始める!

【GAS】Googleドライブの特定フォルダ内の最新のファイルを取得する

GAS(GoogleAppsScript)
GAS(GoogleAppsScript)
この記事は約6分で読めます。

※記事中に広告情報を含みます。

\ワードプレスのスキルアップはこちら!/ WordPress入門読本

Google Apps Script(GAS)を使用して、Googleドライブ内の特定のフォルダから最新のファイルを取得する方法について試していきます。

Googleドライブ内の特定のフォルダから最新のファイルを取得する

GASを開き、新しいプロジェクトを作成して、プロジェクトに以下のようなコードを作成します。

function getLatestFile() {
  var folder = DriveApp.getFolderById('XXXXXXXXXXXXXXXXX');
  var files = folder.getFiles();
  Logger.log("files:" + files);
  var latestFile;
  var latestDate = new Date(0);
  Logger.log("latestDate:" + latestDate);

  while (files.hasNext()) {
    var file = files.next();
    Logger.log("file:" + file);
    var date = file.getLastUpdated();
    Logger.log("date:" + date);
    if (date > latestDate) {
      latestFile = file;
      Logger.log("latestFile:" + latestFile);
      latestDate = date;
      Logger.log("latestDate:" + latestDate);
    }
  }
  return latestFile;
}

上記のコードの中で、「フォルダID」を取得したいフォルダの実際のIDに置き換えます。コードを保存し、getLatestFile()関数を実行します。

最新のファイルが返されます。

情報	files:FileIterator
情報	latestDate:Thu Jan 01 1970 09:00:00 GMT+0900 (Japan Standard Time)
情報	file:ファイルD
情報	date:Wed Mar 08 2023 12:31:16 GMT+0900 (Japan Standard Time)
情報	latestFile:ファイルD
情報	latestDate:Wed Mar 08 2023 12:31:16 GMT+0900 (Japan Standard Time)
情報	file:ファイルC
情報	date:Wed Mar 08 2023 12:28:20 GMT+0900 (Japan Standard Time)
情報	file:ファイルB
情報	date:Wed Mar 08 2023 12:26:41 GMT+0900 (Japan Standard Time)
情報	file:ファイルA
情報	date:Wed Mar 08 2023 12:23:04 GMT+0900 (Japan Standard Time)

latestFileには、最終更新時間を持っているファイルDが取得できます。

getLastUpdated()とは?

getLastUpdated()関数は、Google Apps Script(GAS)で使用される関数で、Googleドライブ内のファイルの最終更新日時を取得するために使用されます。

var date = file.getLastUpdated();

でファイルの最終更新日時を取得しています。

if (date > latestDate) {
      latestFile = file;
      Logger.log("latestFile:" + latestFile);
      latestDate = date;
      Logger.log("latestDate:" + latestDate);
    }

の比較演算子で、もしフォルダ内のファイルが最終更新日時であれば、latestDate = date;によってループに入らなくなるので、latestFile = file;で最終更新日時をもつファイルが取得できます。

これにより、return latestFile;でファイルを取得できます。

別の方法(配列で取得する)

別の方法として、配列で取得する方法も考えられます。

[rml_read_more]

var folder_id = "XXXXXXXXXXXXXX";

//idからフォルダ内で一番新しいファイルを取得
function getNewestFile(id){
  var files = getFilesArray(id);
  files = files.sort(SortfileByDate);
  return files[0];
}
//idからフォルダ内のファイルを配列で取得
function getFilesArray(id){
  var files = [];
  var files_itr = DriveApp.getFolderById(id).getFiles();
  while (files_itr.hasNext()) {
    var file = files_itr.next();
    files.push(file);
  }
  return files;
}

//ファイルを新しい順に並び替える
function SortfileByDate(f1, f2){
  return (f1.getLastUpdated() < f2.getLastUpdated()) ? 1 : -1;
}

CSVファイルを書き込む

例えば、フォルダ内の最新のCSVファイルを、指定したファイルに自動的に書き込む・・・といったことも可能になりそうです。

//最新のCSVファイルをSheetへ展開する
function import_newcsv(){
  var file = getNewestFile(folder_id);
  csv2sheet(file);
}

//CSVをシートに書き込む
function csv2sheet(file){
      var data = file.getBlob().getDataAsString("Shift_JIS"); 
          var csv = Utilities.parseCsv(data);
          //既に入っているデータを消去する
          sheet.getRange('A1:Z'+ lastrows).clearContent(); 
          //スプレッドシートの指定範囲へCSVデータの貼り付け
          //書式はそのままで値のみ貼り付け
          sheet.getRange(2,3,csv.length,csv[0].length).setValues(csv); 
}

使い方次第で便利になりそうです。

まとめ

これで、Googleドライブ内の特定のフォルダから最新のファイルを取得することができます。このコードをさらに改良して、ファイルのメタデータを取得するなど、より高度な処理を実行することもできます。

URLをコピーしました!