雪ん子パースペクティヴ

読むとちょっとタメになるエントリー。コメントあると嬉しいです。

【Google Apps Script】ディレクトリからファイル名を取得し、指定したファイル名の有無を確認する。

こういった事務的な処理は基本だけど、大事。

 

はろー、yukiです。

 

ファイル名有無の確認は、すなわちファイル有無の確認。

環境がローカルPCでもクラウドでも、サーバでもやることは同じです。

確認を実行する言語が変わっても、処理は大差ありません。

(言語によりコーディングの長短はあると思います)

 

今回は、Google Drive内で実施するので、Google Apps Scriptを使用しました。

 

コードは下記になります。

////////////////////////////////////////////////////////////////////////////////
///                                                                          ///
///    ディレクトリからファイル名を取得し、指定したファイル名の有無を確認    ///
///                                                                          ///
////////////////////////////////////////////////////////////////////////////////

var fileDir = "ここにディレクトリのID";
var fileName = "ここにファイル名";

function searchFile() {
  
  // 既存ファイルの確認
  var oldFiles = DriveApp.getFolderById(fileDir).getFiles();
  var oldFileAry = [];
  var countOldFileAry = 0; // 変数oldFileAryの配列キーに使用
  var countMakeFile = 0; // ファイル名が一致する場合に回数をカウント
  
  // getFilesメソッド
  // 戻り値はイテレータ(Drive内の全てのファイルのコレクション)
  // https://developers.google.com/apps-script/reference/drive/drive-app#getfiles

  // イテレータの詳細は下記URL
  // https://qiita.com/kura07/items/cf168a7ea20e8c2554c6
  
  
  while(oldFiles.hasNext()){
    oldFileAry[countOldFileAry] = oldFiles.next().getName(); 
    countOldFileAry++;
  }

  // hasNextメソッド ※変数oldFilesはイテレータのため
  // 戻り値はBoolean型
  // https://developers.google.com/apps-script/reference/drive/file-iterator
  
  // nextメソッド
  // 戻り値はオブジェクト(ファイル)
  // https://developers.google.com/apps-script/reference/drive/file-iterator#next
  
  // getNameメソッド
  // 戻り値はファイル名
  // https://developers.google.com/apps-script/reference/drive/file#getname
  
  
  // 指定したファイル名と同じファイル名の有無を確認
  for(var i = 0; i < oldFileAry.length; i++){
    if(fileName == oldFileAry[i]){
      countMakeFile++;
    }else{
      // 指定したファイル名は存在しない
//      Logger.log("Not same, oldFile : %s, fileName : %s", oldFileAry[i], fileName);
    }
  }

  
  // 指定したファイル名がない場合、該当ファイルを作成
  // ※countMakeFileが0の時、同じファイル名がない
  if(countMakeFile == 0){
    // ここに処理を記述
    //
    // ファイル出力
    //    var makeFile = Drive.Files.insert(fileName, fileDir);
    //  
  }else{
    // ountMakeFileが1の時、同じファイル名がすでにある
    //    Logger.log("countMakeFile : %s", countMakeFile);
  }

}

 

 

指定したファイル名がない時の処理は、その他にも色々とあると思います。

ファイル名をスプレッドシートのセルに入力するとか。単にログ出力するとか。

 

VBAではイテレータは扱わないので、Excelマクロを使う方にとっては新鮮かも。

僕がイテレータを初めて見たのは、pythonを勉強を始めた6年くらい前のことで、調べて思い出したくらいです。

next()メソッドを使うあたり、繰り返し処理に適した配列と言えそうです。

 

ちなみに、有無を確認し、何かを実行する処理は、もっと短くできないものでしょうか。

(なんか、いつも回数カウントを用意している気がする。。。)

 

 

以上。

 

 

Googleアドセンス