【やりたいこと】
マイドライブにある指定のスプレッドシートを毎日指定の時間になったら、Excel形式へと変換して対象者へとメールを自動送信する方法を実現させたいと考えております。
【これまでに】
https://teratail.com/questions/16326
上記のteratailが似たような事をやっているのではないかと思い試していますが上手くいきません。 私のやり方が間違っているのかも分からない状態です。
メールはうまく発行できるのですが、何も添付されていない状態です。
そもそも使い方が間違っているのでしょうか・・・・。
何か良い方法がありましたらご教示いただければ幸いです。
宜しくお願いいたします。
【参考コード】
GoogleAppscript
1function sendMail_Excel2() { 2 // フォルダ、ファイル関係 3 var targetFolderIds = ["folder1", "folder2", "folder3", "folder4", "folder5"]; 4 var targetFolder; 5 var folderName; 6 var objFiles; 7 var objFile; 8 var fileName; 9 var key; 10 11 // メール関係 12 var mailto = "@gmail.com"; 13 var subject = "[GoogleDrive]定期バックアップ(" + Utilities.formatDate(new Date(), 'JST', 'yyyy/MM/dd') + ")"; 14 var body = ""; 15 16 // その他 17 var nowDate = Utilities.formatDate(new Date(), 'JST', 'yyyyMMdd'); 18 var fetchUrl; 19 var fetchOpt = { 20 "headers" : { Authorization: "Bearer " + ScriptApp.getOAuthToken() }, 21 "muteHttpExceptions" : true 22 }; 23 24 var xlsxName; 25 var attachmentFiles = new Array(); 26 27 try 28 { 29 for (var i = 0; i < targetFolderIds.length; i++) { 30 // Idから対象フォルダを取得 31 targetFolder = DriveApp.getFolderById(targetFolderIds[i]); 32 folderName = targetFolder.getName(); 33 body = body + folderName + "\n"; 34 35 // 対象フォルダ以下のSpreadsheetを取得 36 objFiles = targetFolder.getFilesByType(MimeType.GOOGLE_SHEETS); 37 38 while (objFiles.hasNext()) { 39 objFile = objFiles.next(); 40 key = objFile.getId(); 41 fileName = objFile.getName(); 42 body = body + " - " + fileName + "\n"; 43 44 xlsxName = fileName + "_" + nowDate + ".xlsx"; 45 fetchUrl = "https://docs.google.com/feeds/download/spreadsheets/Export?key=" + key + "&exportFormat=xlsx"; 46 attachmentFiles.push(UrlFetchApp.fetch(fetchUrl, fetchOpt).getBlob().setName(xlsxName)); 47 } 48 } 49 } 50 catch(e){ 51 subject = "ERROR:" + subject; 52 body = "エラー : " + e.message; 53 } 54 55 // メール送信 56 MailApp.sendEmail(mailto, subject, body, {attachments:attachmentFiles}); 57} 58
【うまく動作しないコード】
上記参考コードの内、ファイルIDとメールアドレスさえ修正しておけば、
スプレッドシートがExcel形式に変換されて、添付メールとなって送る事が出来ると思ったのですが・・・・・。
すみません。GASに触れる事が今回初めてなもので。
GoogleAppscript
1function sendMail_Excel2() { 2 // フォルダ、ファイル関係 3 var targetFolderIds = [”対象のスプレッドシートのファイルIDを入力"]; 4 var targetFolder; 5 var folderName; 6 var objFiles; 7 var objFile; 8 var fileName; 9 var key; 10 11 // メール関係 12 var mailto = "自分のメールアドレスを入力@gmail.com"; 13 var subject = "[GoogleDrive]定期バックアップ(" + Utilities.formatDate(new Date(), 'JST', 'yyyy/MM/dd') + ")"; 14 var body = ""; 15 16 // その他 17 var nowDate = Utilities.formatDate(new Date(), 'JST', 'yyyyMMdd'); 18 var fetchUrl; 19 var fetchOpt = { 20 "headers" : { Authorization: "Bearer " + ScriptApp.getOAuthToken() }, 21 "muteHttpExceptions" : true 22 }; 23 24 var xlsxName; 25 var attachmentFiles = new Array(); 26 27 try 28 { 29 for (var i = 0; i < targetFolderIds.length; i++) { 30 // Idから対象フォルダを取得 31 targetFolder = DriveApp.getFolderById(targetFolderIds[i]); 32 folderName = targetFolder.getName(); 33 body = body + folderName + "\n"; 34 35 // 対象フォルダ以下のSpreadsheetを取得 36 objFiles = targetFolder.getFilesByType(MimeType.GOOGLE_SHEETS); 37 38 while (objFiles.hasNext()) { 39 objFile = objFiles.next(); 40 key = objFile.getId(); 41 fileName = objFile.getName(); 42 body = body + " - " + fileName + "\n"; 43 44 xlsxName = fileName + "_" + nowDate + ".xlsx"; 45 fetchUrl = "https://docs.google.com/feeds/download/spreadsheets/Export?key=" + key + "&exportFormat=xlsx"; 46 attachmentFiles.push(UrlFetchApp.fetch(fetchUrl, fetchOpt).getBlob().setName(xlsxName)); 47 } 48 } 49 } 50 catch(e){ 51 subject = "ERROR:" + subject; 52 body = "エラー : " + e.message; 53 } 54 55 // メール送信 56 MailApp.sendEmail(mailto, subject, body, {attachments:attachmentFiles}); 57}
sgr-2様のアドバイス後下記の通り修正を行い、
添付のあるメールを送る事までは出来ましたが、
添付されたExcelには、データはなく開く事もできませんでした。
もしかしたらでもなく、まだ余計なコードを書いてしまっているのかもしれません。
function sendMail_Excel() { // フォルダ、ファイル関係 var targetFileId = ["スプレッドシートのファイルID"]; var targetFolder; var folderName; var objFiles; var objFile; var fileName; var key; // メール関係 var mailto = "自分のアドレス@gmail.com"; var subject = "[GoogleDrive]定期バックアップ(" + Utilities.formatDate(new Date(), 'JST', 'yyyy/MM/dd') + ")"; var body = ""; // その他 var nowDate = Utilities.formatDate(new Date(), 'JST', 'yyyyMMdd'); var fetchUrl; var fetchOpt = { "headers" : { Authorization: "Bearer " + ScriptApp.getOAuthToken() }, "muteHttpExceptions" : true }; var xlsxName; var attachmentFiles = new Array(); // 添付するファイルの名前を指定 xlsxName = "付けたい名前.xlsx"; try { fetchUrl = "https://docs.google.com/feeds/download/spreadsheets/Export?key=" + targetFileId + "&exportFormat=xlsx"; attachmentFiles.push(UrlFetchApp.fetch(fetchUrl, fetchOpt).getBlob().setName(xlsxName)); } catch(e){ subject = "ERROR:" + subject; body = "エラー : " + e.message; } // メール送信 MailApp.sendEmail(mailto, subject, body, {attachments:attachmentFiles}); }
回答1件
あなたの回答
tips
プレビュー