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