GASでGoogleフォームからPDF添付メール送信
概要
Googleフォームから送信
↓
回答内容がWord(Googleドキュメント)のテンプレートに埋め込まれて、PDF変換されたファイルが管理者にメール添付で届く。
という内容です。
使用例
使用用途の具体例としては、病院(医院・クリニック)の発熱外来やPCR検査などで、事前に患者様にWEB問診をGoogleフォームから入力して送信してもらえば、病院(医院・クリニック)側は事前に用意した問診表に回答が配置された状態のPDFが届くので、そのメールで届いたPDFをプリントアウトするだけで問診表が完成っていうことです。
ただし、保険証や渡航目的のPCRの方のパスポートの写メを送ってもらうためのフォームは別に用意する必要があります。
Googleフォームでファイル添付してもらおうと思ったら、Googleログインが必要なためです。
設置作業手順
①Googleドライブでフォルダ作成
②その中にWordかGoogleドキュメントのテンプレートを入れる
下記画像のような形で、回答を埋め込みたい所に「input01」という感じで書いておく
③Googleフォームを作成
※このフォームは先程作成したGoogleドライブのフォルダの中に保存
④フォームからスクリプトエディタを開く
⑤Google Apps Script(GAS)でスクリプトを書く
※「input数字」や項目はフォームやテンプレートと合わせる。
FormApp.getActiveForm();function form2doc(e) {// define the folder of your workvar folder = DriveApp.getRootFolder();var folderFiles = folder.getFiles();// set the template file IDvar fileId = "ここにテンプレートのIDをコピペ"var fname = ""; // namevar furigana = "";var birthday = "";var age = "";var gender = "";var postal = "";var address = "";var tel = "";var cellphone = "";var temperature = "";var yesno01 = "";var itsukara = "";var symptoms = "";var yesno02 = "";var wantmedi = "";var yesno03 = "";var yesno04 = "";var yesno05 = "";var yesno06 = "";var caution = "";var yesno07 = "";var closecontact = "";var email = ""; // default emails to know if it failsemail = e.response.getRespondentEmail(); // get email from methodvar results = ""; // 全結果var itemResponses = e.response.getItemResponses(); // get data from the form// store results and several keysvar x = ""; // contentsvar y = ""; // resultsitemResponses.forEach(function(itemResponse){x = itemResponse.getItem().getTitle()y = itemResponse.getResponse()results += '【' + x + '】\n'results += y + '\n\n'if(x == "氏名"){fname = y;}else if (x == "氏名のふりがな"){furigana = y;}else if (x == "生年月日"){birthday = y;}else if (x == "満年齢(数字のみ記入)"){age = y;}else if (x == "性別"){gender = y;}else if (x == "郵便番号"){postal = y;}else if (x == "住所"){address = y;}else if (x == "電話番号"){tel = y;}else if (x == "携帯番号(ある方はご記入ください)"){cellphone = y;}else if (x == "現在の体温は?"){temperature = y;}else if (x == "症状が出始めてから37.5℃以上の発熱はありましたか?"){yesno01 = y;}else if (x == "いつからの症状ですか?"){itsukara = y;}else if (x == "現在の主な症状は?"){symptoms = y;}else if (x == "薬の処方は希望されますか?"){yesno02 = y;}else if (x == "処方時の希望はありますか?"){wantmedi = y;}else if (x == "コロナワクチンは接種しましたか?"){yesno03 = y;}else if (x == "現在、緑内障の治療中ですか?"){yesno04 = y;}else if (x == "(男性の方)現在、前立腺の治療中ですか?"){yesno05 = y;}else if (x == "(女性の方)現在、妊娠中ですか?"){yesno06 = y;}else if (x == "上の6つの注意書きを必ずお読みください"){caution = y;}else if (x == "PCR検査を希望しますか?"){yesno07 = y;}else if (x == "新型コロナウイルスの発症場所や発症者との接触など感染の疑いはありますか?"){closecontact = y;}else if (x == "メールアドレス"){email = y;}});// copy and update documentsvar date = new Date(); //ファイル名の日付部分作成var formattedDate = Utilities.formatDate(date, "JST", "yyyy'年'MM'月'dd'日'");//コピー元のファイルを開くvar file = DriveApp.getFileById(fileId);//コピーを作成,作成したコピーを参照var newFile = file.makeCopy(fname + ".doc");//コピーしたファイルをすぐに更新するため,IDを取得var newid = newFile.getId();var doc = DocumentApp.openById(newid)var docbody = doc.getBody(); // documents の本体を取得docbody.replaceText('input01',fname);docbody.replaceText('input02',formattedDate);docbody.replaceText('input03',furigana);docbody.replaceText('input04',birthday);docbody.replaceText('input05',age);docbody.replaceText('input06',gender);docbody.replaceText('input07',postal);docbody.replaceText('input08',address);docbody.replaceText('input09',tel);docbody.replaceText('input10',cellphone);docbody.replaceText('input11',temperature);docbody.replaceText('input12',yesno01);docbody.replaceText('input13',itsukara);docbody.replaceText('input14',symptoms);docbody.replaceText('input15',yesno02);docbody.replaceText('input16',wantmedi);docbody.replaceText('input17',yesno03);docbody.replaceText('input18',yesno04);docbody.replaceText('input19',yesno05);docbody.replaceText('input20',yesno06);docbody.replaceText('input22',caution);docbody.replaceText('input23',yesno07);docbody.replaceText('input24',closecontact);doc.saveAndClose(); // 強制的にファイルを更新する.// reopen the file// var newid = newFile.getId();var document = DriveApp.getFileById(newid)var link = 'https://docs.google.com/document/d/'+newidresults += 'Your document is created at ' + link;// create emailvar subject = fname + ' 様分の発熱外来とPCR検査用WEB問診票';var emailbody = '発熱外来とPCR検査用の問診票が届きました。PDF添付されてます。\n\n';emailbody += '-------------------------------------------------------------\n\n';emailbody += resultsLogger.log(email);Logger.log(results);Logger.log(link);// create pdf from the google document// DriveApp.getFolderById(targetFolderId).createFile(document.getAs(MimeType.PDF).setName(fname + ".pdf")); // convert pdfvar pdf = document.getAs(MimeType.PDF).setName(fname + ".pdf"); // get pdf// set sharing for the google documentvar access;var permission;access = DriveApp.Access.ANYONE_WITH_LINK;permission = DriveApp.Permission.EDIT;document.setSharing(access, permission);// document.setSharing(DriveApp.Access.PRIVATE, DriveApp.Permission.VIEW);// document.addEditor(email);// send email with pdfvar sender_email = "送信元メールアドレス";var uketsuke_email = "送信先メールアドレス";var objArgs = {from:sender_email, attachments:pdf};GmailApp.sendEmail(uketsuke_email, subject, emailbody, objArgs);}
⑥スクリプト内の3ヶ所を書き換える
a.ここにテンプレートのIDをコピペ
b.送信元メールアドレス
c.送信先メールアドレス
↓
テンプレートのIDは、WEB上で(ブラウザで)Googleドライブを開き、その中のWordもしくはGoogleドキュメントのテンプレート(この場合は問診表テンプレート)を開くと、アドレスバーにURLが表示されます。
「https://docs.google.com/document/d/この部分がID/edit」
このIDの部分をコピペして保存します。
⑦トリガーを作成
保存すれば完成です。
あとはGoogleフォームからテスト送信してみてください。
参考にさせていただいたページ→https://qiita.com/yamadasuzaku/items/fdec0813c704a6a2784a
コメント