前提
Googleフォームを使用して依頼フォームを作成しているのですが、依頼を受領する側の作業効率アップのために
フォーム内容をスプレッドシートテンプレート①に抽出しPDF化したものと、
そのPDFとは別の用途で使用するスプレッドシートテンプレート②にフォームの回答の一部を抽出したもの、
のふたつを指定したひとつの宛先へ自動送信するGASを作成したいです。
実現したいこと
発生している問題・エラーメッセージ
PDF化したものを添付して指定の宛先へ送付するコードは実装できたのですが、
複数の添付資料(PDFとスプレッドシート)を
ひとつの宛先に送付するにはどのようなコードにすればよいのかが分かりません。
エラーメッセージ
該当のソースコード
GAS
//フォーム送信時にPDFを添付して指定宛先にメールを送信 // FormApp.getActiveForm() function myFunction(event) { //今日の日付 var request_date = new Date(); // フォーム var res = event.response.getItemResponses(); var staff_name; var cc_mailaddress; var proposal_num; var project_title; var address; var resuest_timing; //ほか項目多数(省略) for (var n in res) { var item = res[n]; var name = item.getItem().getTitle(); var value = item.getResponse(); switch (name) { case '担当': staff_name = value; break; case 'CC送付先(メールアドレス)': cc_mailaddress = value; break; case '番号': proposal_num = value; break; case '件名': project_title = value; break; case '住所': address = value; break; case '依頼タイミング': resuest_timing = value; break; //ほか項目多数(省略) } } // スプレッドシートURLから抽出したIDを入力 var ssid = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"; var ss = SpreadsheetApp.openById(ssid); var pdfss = ss.getSheetByName("【依頼シート】"); var sheetid = ss.getActiveSheet().getSheetId(); pdfss.getRange("U3").setValue(request_date); //依頼日 pdfss.getRange("C3").setValue(staff_name); //担当 pdfss.getRange("H3").setValue(cc_mailaddress); //CC送付先(メールアドレス) pdfss.getRange("F5").setValue(proposal_num); //番号 pdfss.getRange("F9").setValue(project_title); //件名 pdfss.getRange("F10").setValue(address); //住所 pdfss.getRange("K5").setValue(resuest_timing); //依頼タイミング //ほか項目多数(省略) SpreadsheetApp.flush(); // 以下PDF化コード(サイズ=A4) var url = "https://docs.google.com/spreadsheets/d/SSID/export?".replace("SSID", ssid); var url_ext = []; var opts = { format: "pdf", size: "A4", fzr: "false", portrait: "true", gridlines: "false", printtitle: "false", pagenumbers: "false", fitw: "true", sheetnames: "false", gid: sheetid }; // 上記のoptsのオプション名と値を「=」で繋げて配列url_extに格納 for (optName in opts) { url_ext.push(optName + "=" + opts[optName]); } // url_extの各要素を「&」で繋げる var options = url_ext.join("&"); Logger.log(options) try { // API使用のためのOAuth認証 var token = ScriptApp.getOAuthToken(); var response = UrlFetchApp.fetch(url + options, { headers: { "Authorization": "Bearer " + token } }); // ファイル名を作成「番号_件名(依頼タイミング)yyMMdd.pdf」 var fileName = proposal_num + "_" + project_title + "(" + resuest_timing + ")" + Utilities.formatDate(request_date, "JST", "yyMMdd"); // Googleドライブ上のPDF格納先フォルダからIDを入力 var folder = DriveApp.getFolderById("yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy"); var fileBlob = response.getBlob().setName(fileName); folder.createFile(fileBlob); // メールアドレス MailApp.sendEmail("abc@defg.jp", "【受付完了】" + proposal_num + "_" + project_title + "(担当:" + staff_name + ")", "---------------自動通知---------------\n" + "\n" + "依頼を受け付けましたのでご確認ください。\n" + "\n" + Utilities.formatDate(request_date, "JST", "yyyy/MM/dd H:mm"), { attachments : [fileBlob] }); } catch (e) { Logger.log("ファイル生成に失敗しました" + e) } }
GAS
FormApp.getActiveForm(); // var targetFolderId = "yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy" function renrakuhyo(e) { // テンプレが格納されているフォルダを定義する var folder = DriveApp.getRootFolder(); var folderFiles = folder.getFiles(); // テンプレートファイルIDを設定する var fileId = "zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz" var staff_name = ""; // staff_name var request_date = ""; // request_date var proposal_num = ""; // proposal_num var project_title = ""; // project_title //中略 var fin_num = ""; // fin_num var results = ""; // 全結果 //フォームの回答データ部分を取得 // get data from the form var itemResponses = e.response.getItemResponses(); // store results and several keys // 項目と回答を抽出する var x = ""; // contents var y = ""; // results itemResponses.forEach(function(itemResponse){ x = itemResponse.getItem().getTitle() y = itemResponse.getResponse() results += '【' + x + '】\n' results += y + '\n\n' if(x == "営業担当"){ staff_name = y;} else if (x == "依頼日"){ request_date = y;} else if (x == "案件番号"){ proposal_num = y;} else if (x == "案件名"){ project_title = y;} //中略 else if (x == "最終図面番号"){ fin_num = y;} }); // スプレッドシートのコピーと更新 var date = new Date(); //ファイル名の日付部分作成 var formattedDate = Utilities.formatDate(date, "JST", "yyyy'年'MM'月'dd'日'"); //コピー元のファイルを開く var file = DriveApp.getFileById(fileId); //コピーを作成,作成したコピーを参照 var newFile = file.makeCopy(proposal_num); //コピーしたファイルをすぐに更新するため,IDを取得 var newid = newFile.getId(); var spreadsheet = SpreadsheetApp.openById(newid) //シートを取得する var sheet = spreadsheet.getSheets()[0] ; var textFinder = sheet.createTextFinder('input1'); textFinder.replaceAllWith(staff_name); var textFinder = sheet.createTextFinder('input2'); textFinder.replaceAllWith(request_date); var textFinder = sheet.createTextFinder('input3'); textFinder.replaceAllWith(proposal_num); var textFinder = sheet.createTextFinder('input4'); textFinder.replaceAllWith(project_title); //中略 var textFinder = sheet.createTextFinder('input14'); textFinder.replaceAllWith(fin_num); // 変更内容を即反映 SpreadsheetApp.flush(); // ファイルを開き直す // var newid = newFile.getId(); var document = DriveApp.getFileById(newid) var url = 'https://docs.google.com/document/d/'+newid results += 'Your spreadsheet is created at ' + url; // ファイル名を作成「番号_◯◯yyMMdd」 var fileName = proposal_num + "_" + "◯◯" + Utilities.formatDate(request_date, "JST", "yyMMdd"); // Googleドライブ上のスプレッドシート格納先フォルダからIDを入力 var folder = DriveApp.getFolderById("vvvvvvvvvvvvvvvvvvvvvvvvvvvvv"); var fileBlob = response.getBlob().setName(fileName); folder.createFile(fileBlob); //このうしろにPDFの記述&さいごにメール本文??? }
試したこと
PDFを添付して送信するコードが完成したのですが、スプレッドシートテンプレート②にフォームの一部の項目を
反映させるコードを途中まで書いたのですがメール送信GASにどのように追加すれば良いのかがわかりません。
下記のサイトを参考にスプレッドシートテンプレート②用のコードを作成してみましたが、
PDF化したいわけではないのでつなげ方が分からず困っております。
■GoogleスプレッドシートからPDF生成とメール送信
https://qiita.com/yamadasuzaku/items/fdec0813c704a6a2784a
それとも同じフォームの回答を使用するので全く別のコードになるのでしょうか。
お力をお貸しください。よろしくお願いいたします。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
0 コメント