2020-03-29

【Google Apps Script】保存先フォルダが存在しない場合に、フォルダを作成してからファイルを保存する処理

やりたいこと

Google Apps Script (GAS) で生成したドキュメント special_text を、my_docs というフォルダ内に保存したいが、my_docs が存在するかどうかわからない。

  • my_docs が存在する場合、そのまま my_docs 内に保存する。

  • my_docs が存在しない場合、my_docs フォルダを作成してからその中に保存する。

script.gs

function save() {
  // ファイルの生成
  const doc = DocumentApp.create("special_text");
  doc.getBody().setText("here is my specail content!");
  const docId = doc.getId();

  const targetFolderName = "my_docs";
  // 指定した名前のフォルダを取得
  const folderIterator = DriveApp.getRootFolder().getFoldersByName(
    targetFolderName
  );
  let targetFolder;
  if (folderIterator.hasNext()) {
    // 存在する場合
    targetFolder = folderIterator.next();
  } else {
    // 存在しない場合
    targetFolder = DriveApp.getRootFolder().createFolder(targetFolderName);
  }

  // ファイルをフォルダ内に移動
  docFile = DriveApp.getFileById(docId);
  targetFolder.addFile(docFile);
}

解説

Google Apps Script で指定した名前のフォルダーを取得するには、getFoldersByName() 関数を使います。

この関数の返り値は FolderIterator クラスであり、FolderIterator.hasNext() メソッドを呼び出すと該当のフォルダが存在する場合に true が、存在しない場合は false が返却されます。

hasNext()true の場合に、next() メソッドを呼び出せば、指定した名前のフォルダにアクセスできます。

フォルダが存在しなかった場合は、createFolder() でフォルダーを作成します。

あとがき

FolderIterator の取り扱い方がポイントでした。フォルダがネストする場合の処理はもう一工夫必要そうです。

当方では Google Apps Sprict を使ったツール作成等も承っております。Contact からお気軽にお問合せください!

参考