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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

Q&A

解決済

1回答

225閲覧

入力内容が新規ではなくひとつ前の情報が入力される。

HAYATOALFS

総合スコア16

Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

0グッド

0クリップ

投稿2019/08/19 08:04

Google Formで入力していただいた内容を自動PDF化し、自動返信メールに送付が目的です。土台は出来上がっているのですが、なぜか請求書の中身の内容が新規入力ではなく一つ前の情報が入力された請求書が送付されます。kikukiku様の以下の内容を提示していただきましたが上手くいきませんでした https://teratail.com/questions/87399

使用コードは以下になります:

function for_users2() { var title = "【お問い合わせありがとうございます】"; var body = "この度は【OOOOOOOOOOOOOO】にお問い合わせいただきまして、誠にありがとうございます。\n" + "お問合せいただいた内容は次の通りです。\n" + "内容を確認の上、あらためてご連絡いたしますので、今しばらくお待ちください。\n\n" + "------------------------------------------------------------\n\n" var body2 = "------------------------------------------------------------\n\n" + "48時間経過しても返信がない場合は、お手数ですが再度フォームからお問い合わせください。\n" + "本メールに心当たりが無い場合は、その旨を記載の上ご返信くださいますようお願いいたします。\n\n"; var name = '名前'; var mail = 'メールアドレス'; var address = ""; var sheet = SpreadsheetApp.getActiveSheet(); var row = sheet.getLastRow(); var column = sheet.getLastColumn(); var range = sheet.getDataRange(); var TIMESTAMP_LABEL = 'タイムスタンプ'; for (var i = 1; i <= column; i++ ) { var item = range.getCell(1, i).getValue(); var value = range.getCell(row, i).getValue(); if ( item === TIMESTAMP_LABEL ) { item = 'お問い合わせ日時'; } body += "■"+item+"\n"; body += value + "\n\n"; if ( item === name ) { body = value+" 様\n\n"+body; } if ( item === mail ) { address = value; } } body += body2; var token = ScriptApp.getOAuthToken(); var pdf = UrlFetchApp.fetch("https://docs.google.com/spreadsheets/d/oooooooooooooooooooooooooooo/export?exportFormat=pdf&format=pdf&size=A4&portrait=true&fitw=true&sheetnames=false&printtitle=false&pagenumbers=false&gridlines=false&fzr=false&gid=ooooooooo", {headers: {'Authorization': 'Bearer ' + token}}).getBlob().setName('請求書'); GmailApp.sendEmail( address, title, body, { attachments: [pdf], name: 'Automatic Emailer Script' } ); }

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

papinianus

2019/08/19 08:35

過去質問探してください。 ラグがあってFlushとかして解消した質問があったと思います。 今では、そういう動作になっているのかも。
guest

回答1

0

ベストアンサー

フォームの入力をトリガーに実行すると、スプレッドシートに書き込まれるまでにタイムラグが発生しますので、データはフォームのスクリプトで入力値をパラメータとして直接受け取る様に修正すれば解決できます。

投稿2019/08/19 08:32

hiroshi0240

総合スコア640

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

HAYATOALFS

2019/08/19 09:09

大変申し訳ないんですが、hiroshi0240様の書かれたことの意味は分かるんですが、スクリプトで入力値をパラメータとして直接受け取る様に修正とは具体的にどうすればいいですか? 質問ばかりですみません。
HAYATOALFS

2019/08/20 01:32

これはフォーム側のスクリプトをいじるってことですよね。 なかなかうまくいきません。4,5回に一回はちゃんと新規情報で来るんですが、大体が一つ前になってしまいますね。
hiroshi0240

2019/08/20 01:38

フォーム側のスクリプトでコーディングするという理解であっていますよ。submit(event)で入力時に自動実行で、event.response.getItemResponses()で入力値を配列で取得し、それを使って請求書の作成&メール通知をするってことです。
HAYATOALFS

2019/08/20 05:13

素人の質問ですみません。 event.response.getIemResponse()と自分のコードを組み合わせるということでしょうか?
HAYATOALFS

2019/08/20 05:15

ちなみにSpreadsheetApp.flush()も試してみましたが、やはりうまくいかないです。
hiroshi0240

2019/08/20 06:21

var eventarray = event.response.getIemResponse(); var item = eventarray[対象の質問の番号]; var value = eventarray[対象の質問の番号]; としてフォーム側のスクリプトでコーディングし直すという意味です。 なので、請求書Spreadsheetへ上記itemとvalueを使って編集するコードも合わせてフォームのスクリプトに仕込んで同時に実行することになります。
HAYATOALFS

2019/08/20 08:10

回答ありがとうございます。スクリプト自体、目指しているものがUtilities.sleep(5000)で全部解決しました。至急のプロジェクトだったため、とりあえずUtilities.sleep(5000)を採用しましたが、今後さらに安定させるため、hiroshi0240様が提案してくださったことも含め、さらに勉強し試行錯誤を繰り返します。今回は初心者ながら丁寧に教えてくださってどうもありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問