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 work
  var folder = DriveApp.getRootFolder();
  var folderFiles = folder.getFiles(); 

  // set the template file ID 
  var fileId = "ここにテンプレートのIDをコピペ"

  var fname = ""// name
  var 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 fails
  email = e.response.getRespondentEmail(); // get email from method 
  var results = ""// 全結果  

  var itemResponses = e.response.getItemResponses(); // get data from the form
  // 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 == "氏名"){
      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 documents
  var 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/'+newid
  results += 'Your document is created at ' + link;

  // create email 
  var subject = fname + ' 様分の発熱外来とPCR検査用WEB問診票';
  var emailbody = '発熱外来とPCR検査用の問診票が届きました。PDF添付されてます。\n\n';
  emailbody += '-------------------------------------------------------------\n\n';  
  emailbody += results

  Logger.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 pdf
  var pdf = document.getAs(MimeType.PDF).setName(fname + ".pdf"); // get pdf 

  // set sharing for the google document 
  var access;
  var permission;
  access = DriveApp.Access.ANYONE_WITH_LINK;
  permission = DriveApp.Permission.EDIT;
  document.setSharing(accesspermission);
//  document.setSharing(DriveApp.Access.PRIVATE, DriveApp.Permission.VIEW);
//  document.addEditor(email);
  // send email with pdf 
  var sender_email = "送信元メールアドレス"
  var uketsuke_email = "送信先メールアドレス"
  var objArgs = {from:sender_emailattachments:pdf};
  GmailApp.sendEmail(uketsuke_emailsubjectemailbodyobjArgs);
}

⑥スクリプト内の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


コメント

このブログの人気の投稿

マイベストプロからのメール

はがきデザインキットが使えなくなって困った

FTP Rush v3 の日本語化