前提・実現したいこと
①Google form回答内容のPDF化
②上記PDF添付の上で、メールアドレスへ送信処理
(メールアドレスはgmailではなく、会社ドメインアドレスです)
言語名:Google Apps Script
上記機能を実装中に以下の問題が発生しました。
発生している問題
事象詳細
①アンケート回答内容展開前のスプレッドシートにてPDF化(従前と変わらず)
→1つ前のアンケート回答者の内容が反映されている状態になってしまっています。
(1人目のアンケート回答者の場合は、回答項目はすべて空白状態です)
②メール大量発生
→フォーム全項目(約60項目)と同じ数のメール(約60通)が発生しています。
1通のメールに付き、フォームの質問/回答が1つずつ増える形で、合計60通ほどメールが届く状態です。
(何度かテスト致しました)
また、全メールに展開前のスプレッドシート内容のPDF添付はあります。
トリガーログ
→「1 日にサービス email を実行した回数が多すぎます。
at onFormSubmit(コード:57)」
該当のソースコード
(以下)
// FormApp.getActiveForm()
function onFormSubmit(e){
////////////////////////////////////////////////////
// 変える可能性のある変数
////////////////////////////////////////////////////
var to = ""; //送信先のメールアドレス
var spreadSheetId = "";//スプレッドシートID
var folderId = "";//PDF格納先のフォルダID
////////////////////////////////////////////////////
// メール送信先の設定
var admin ="";//管理者メールアドレス
var mail_name = "登録アドレス"
var cc = admin; // Cc:
// 件名、本文の設定
var header
= "登録カードの登録内容\n"
- "──────────────────────────────────\n"; //本文のヘッダー
var footer
= "──────────────────────────────────\n\n"
var body =""; //本文
// ▼▼▼メール送信処理▼▼▼
var ss = SpreadsheetApp.openById(spreadSheetId);//スプレッドシートの選択
var ss_sheet = ss.getActiveSheet();//シートの選択
var FORM_DATA = e.response.getItemResponses();
body += header; // Formオブジェクトからタイトルを値を抜き出し、メール本文とスプレッドシートに展開 for (var j = 0; j < FORM_DATA.length; j++){ var item_title = FORM_DATA[j].getItem().getTitle(); var item_value = FORM_DATA[j].getResponse(); body += item_title +"\n"+ item_value + "\n\n"; ss_sheet.getRange(j+2,1).setValue(item_title);//Formのタイトルをシートに展開 ss_sheet.getRange(j+2,2).setValue(item_value);//Formの値をシートに展開 if (item_title=='氏名'){ var user_name = item_value;//氏名情報を変数に格納 if (item_title=='所属事務所'){ var office_name = item_value;//所属事務所情報を変数に格納 } } ss_sheet.getRange(FORM_DATA.length+3,1).setValue('署名'); body += footer; var date = new Date(); var date_format = Utilities.formatDate(date,'Asia/Tokyo','yyyyMMdd'); var pdfname = date_format + "_登録カード_"+ user_name +"+ office_name +".pdf";//PDFの名前 var pdf = ss_sheet.getParent().getAs('application/pdf'); var pdf_format = DriveApp.createFile(pdf).setName(pdfname); var file = DriveApp.getFilesByName(pdfname).next(); DriveApp.getFolderById(folderId).addFile(file); DriveApp.getRootFolder().removeFile(file); MailApp.sendEmail(to, pdfname, body, {attachments:pdf_format});
ss_sheet.getRange("B:B").clearContent();//展開したB列の内容をクリア
}
(以上)
宜しくお願い致します。
あなたの回答
tips
プレビュー