前提
googleドライブの共有フォルダへ資料を格納する際、
ファルダがない場合はフォルダを作成してファイルを保存する。というFunctionをつくっています。
真似て作った部分が多いので修正箇所がわからず行き詰っています。
下記のエラーが出てしまいます。
27行:Exception: Cannot retrieve the next object: iterator has reached the end.
これ以降、全く進みません。
修正、完成できる方がおられましたらご教授の程何卒お願いいたします。
実現したいこと
F2のセルからファルダ名を取得する。
⇓
フォルダがあればB4のファイル名でドライブへアップロード、エクセルへ変換
⇓or
フォルダがなければF2(フォルダ名)でフォルダをつくり、そこへB4(ファイル名)のファイル名でファイルをアップロード、エクセルへ変換
発生している問題・エラーメッセージ
Exception: Cannot retrieve the next object: iterator has reached the end.
該当のソースコード
1 2function fileupload1() { 3 4 var ss = SpreadsheetApp.getActiveSpreadsheet(); 5 var sheet = ss.getActiveSheet(); 6 var name = sheet.getRange('B4').getValue(); 7 const xlsxName = name; 8 9 const sheetID = "xxxxxxxxxxxxxxxxxxxxxx"; 10 11 var id = "xxxxxxxxxxxxxxxxxxxxxx"; //フォルダID 12 13 var ss = SpreadsheetApp.getActiveSpreadsheet(); 14 var sheet = ss.getActiveSheet(); 15 var month = sheet.getRange('F2').getValue(); 16 const targetFolderName = month; 17 18 const folderIterator =DriveApp.getRootFolder().getFoldersByName(targetFolderName); 19 let targetFolder; 20 if (folderIterator.hasNext()) { 21 // 存在する場合 22 targetFolder = folderIterator.next(); 23 24 } else { 25 // 存在しない場合 26 targetFolder = DriveApp.getRootFolder().createFolder(targetFolderName); 27 } 28 var folder = folderIterator.next(); 29 var folderID = folder.getId(); // ファイルID(); 30 31 // スプレッドシートをExcel形式で取得 32 const xlsxFile = excelExport(sheetID, xlsxName); 33 34 // ↓アップロード先にアップロード 35 gdriveUpload(folderID, xlsxFile); 36 37} 38 39//スプレッドシートをexcelに変換して返す 40function excelExport(sheetID, fileName){ 41 // --> エクセルファイル 42 // sheetID:スプレッドシートのID 43 // xlsxName:保存したいファイル名 44 let today = Utilities.formatDate(new Date(),"JST","MMdd");//今日の日付を取得MM-dd方式 45 let xlsxName = `${fileName}${today}.xlsx`; 46 let options = { 47 method: 'get', 48 headers: {"Authorization": "Bearer " + ScriptApp.getOAuthToken()}, 49 muteHttpExceptions: true 50 }; 51 //スプレッドシートの内容をエクセル変換 52 let fetchUrl = `https://docs.google.com/feeds/download/spreadsheets/Export?key=${sheetID}&exportFormat=xlsx`; 53 let xlsxFile = UrlFetchApp.fetch(fetchUrl,options).getBlob().setName(xlsxName); 54 return xlsxFile 55} 56 57// Googleドライブにアップロードする 58function lgdriveUpoad(folderID, uploadFile){ 59 let folder = DriveApp.getFolderById(folderID); 60 let drive_file = folder.createFile(uploadFile); 61 return drive_file; 62 }``` 63 64