質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

89.05%

Google Apps Scritptにて、form回答内容をPDF化及び(PDF添付付きで)メールアドレスへの送信処理

受付中

回答 0

投稿 編集

  • 評価
  • クリップ 2
  • VIEW 386

Uzo

score 12

前提・実現したいこと

①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列の内容をクリア
}

(以上)

宜しくお願い致します。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正の依頼

  • kei344

    2019/07/29 11:51

    PCであれば記入エリアの右部分あたりにリアルタイムに結果が表示されていると思うので、そこを見ながら調整してください。

    キャンセル

  • Uzo

    2019/07/29 11:55

    分かりました!
    ありがとうございます。

    キャンセル

  • papinianus

    2019/07/29 18:12

    やりたいことがわからないのですが、まさかフォームの回答なのに他人の回答も含む現時点の回答リストを送信しようとしてますか?
    コードを整形した結果、余計わけわからなくなってるので下手にいじるくらいなら、もとに戻してください。

    キャンセル

まだ回答がついていません

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 89.05%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る