前提・実現したいこと
Google Apps sctiptでファイルが追加されたことをメールで通知が来るように
したいと考えています。
発生している問題・エラーメッセージ
指定フォルダ内へのファイル追加については問題なく検知できるのですが、
サブフォルダの検知ができません。
サブフォルダまで検索してアップデート日、ファイル名を取得するにはどうすればよいでしょうか?
該当のソースコード
var TARGET_FOLDER_ID = "xxx"; var UPDATE_SHEET_ID = "xxxx"; var UPDATE_SHEET_NAME = "sheet"; var SEND_MAIL_ADDRESS = ["xxx@xxx"] function updateCheck() { // 対象フォルダ配下のファイル最終更新日時を取得。 var lastUpdateMap = {}; function filesearch(TARGET_FOLDER_ID) { var targetFolder = DriveApp.getFolderById(TARGET_FOLDER_ID); var files = targetFolder.getFiles(); while (files.hasNext()) { var file = files.next(); lastUpdateMap[file.getName()] = file.getDateCreated(); } var folders = DriveApp.searchFolders("'" + TARGET_FOLDER_ID + "' in parents"); while (folders.hasNext()) { var folder = folders.next(); lastUpdateMap[folder.getName()] = folder.getDateCreated(); filesearch(folder.getId()); } } filesearch(); // スプレッドシートに記載されているファイル名と更新日時を取得。 var spreadsheet = SpreadsheetApp.openById(UPDATE_SHEET_ID); var sheet = spreadsheet.getSheetByName(UPDATE_SHEET_NAME); var data = sheet.getDataRange().getValues(); // 取得したデータをMapに変換。 var sheetData = {}; // 説明とヘッダを記載しているため2からstart。 for (var i = 2; i < data.length; i++) { sheetData[data[i][0]] = {name : data[i][0], lastUpdate : data[i][1], rowNo : i + 1}; } // 実際のファイルとスプレッドシート情報を比較。 var updateFolderList = []; for (key in lastUpdateMap) { if(key in sheetData) { // ファイル名がシートに存在する場合。 if(lastUpdateMap[key] > sheetData[key].lastUpdate) { // フォルダが更新されている場合。 sheet.getRange(sheetData[key].rowNo, 3).setValue(lastUpdateMap[key]); updateFolderList.push(key); } } else { // ファイル名がシートに存在しない場合。 sheet.getRange(sheet.getLastRow() + 1, 1).setValue(key); sheet.getRange(sheet.getLastRow(), 3).setValue(lastUpdateMap[key]); updateFolderList.push(key); } } // 新規及び更新された情報をメール送信。 if (updateFolderList.length != 0) { SEND_MAIL_ADDRESS.forEach(function(o,i) { MailApp.sendEmail(SEND_MAIL_ADDRESS[i],"追加通知", "写真が追加されました。" + "\n" + "追加されたファイルは以下の通りです。" + "\n" + updateFolderList.join("\n") + "\n\n" ); }); } }
試したこと
https://ctrlq.org/code/20034-search-drive-files
https://stackoverflow.com/questions/36577071/search-files-inside-sub-folders-in-google-drive
などを見たのですが、私の技量では理解できませんでした。
コードには他にも気になることはいくつかありますが、要は「 var files = targetFolder.getFiles();
」のタイミングでそのフォルダ配下の全フォルダ及びファイルを取得する方法を知りたいという理解で良いですか?
後学のために伺いたいのですが、どこでどういうトリガを仕掛けて実行しているのでしょうか?
>要は「 var files = targetFolder.getFiles();」のタイミングでそのフォルダ配下の全フォルダ及び
>ファイルを取得する方法を知りたいという理解で良いですか?
フォルダ配下のファイルが取得できれば、取得のタイミングはいつでも構わないと考えています。
>どこでどういうトリガを仕掛けて実行しているのでしょうか?
プロジェクトのトリガーの設定から、時間主導>分タイマー で実行しています。
回答2件
あなたの回答
tips
プレビュー