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 からお気軽にお問合せください!
参考
- https://developers.google.com/apps-script/reference/drive/folder#getFoldersByName(String)
- https://developers.google.com/apps-script/reference/drive/folder-iterator