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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Google スプレッドシート

Google スプレッドシートは、フリーで利用できる表計算ソフト。Webアプリのためインターネットに接続することで利用できます。チャートやグラフの作成のほか、シートを他のユーザーと共有したり、同時に作業を進めることも可能です。

Google フォーム

Google フォームは、 Google社が提供しているアンケートフォーム作成および集計ができる無料のツール。Googleアカウントがあれば利用が可能です。集計データは、スプレッドシートに収集され、データ分析もできます。

Google Apps Script

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

URL

URL(ユニフォームリソースロケータ)とは、インターネット上のリソース(Webページや電子メールの宛先等)を特定するための形式的な記号の並びの事を言う。

Q&A

解決済

2回答

1613閲覧

Googleフォーム送信時、フォーム編集用URLをスプレッドシートへ記入したい

kuri63

総合スコア3

Google スプレッドシート

Google スプレッドシートは、フリーで利用できる表計算ソフト。Webアプリのためインターネットに接続することで利用できます。チャートやグラフの作成のほか、シートを他のユーザーと共有したり、同時に作業を進めることも可能です。

Google フォーム

Google フォームは、 Google社が提供しているアンケートフォーム作成および集計ができる無料のツール。Googleアカウントがあれば利用が可能です。集計データは、スプレッドシートに収集され、データ分析もできます。

Google Apps Script

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

URL

URL(ユニフォームリソースロケータ)とは、インターネット上のリソース(Webページや電子メールの宛先等)を特定するための形式的な記号の並びの事を言う。

0グッド

0クリップ

投稿2020/06/29 08:21

gas初心者です。
タイトルの様な操作をしたく、下記のプログラムをネット上で見つけ、それを流用させて頂いているのですが、数回に一度、上手くURLが記入されません。
ちゃんと記入される方が多いのですが、なぜ上手く行かない場合があるのか分かりません。
上手く行かない場合でも、トリガーは引かれた記録は残っています。
解る方いましたら、よろしくお願いします。

// 再編集用URLは A 列( = 1)に差し込む。
var colEditURL = 1;

/*

  • フォームの送信時に、紐づけ済みのスプレッドシートに対して再編集用のURLを付与する処理。

*/
function onSubmit(e) {
var response = e.response;
var formID = e.source.getId();
var destinationSheetID = e.source.getDestinationId();
var sheet = SpreadsheetApp.openById(destinationSheetID).getSheetByName('フォームの回答 1');

// シート最終行の再編集用URLが記入済みならば処理を中断する。
if ( sheet.getRange( sheet.getLastRow(), colEditURL ).getValue() != "" ) {
return;
}

// シートの最終行のA列に再編集用のURLを追加します。
sheet.getRange( sheet.getLastRow(), colEditURL ).setValue( response.getEditResponseUrl() );

SpreadsheetApp.flush();
}

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

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

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

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

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

guest

回答2

0

フォームからのデータ移行よりも先にプログラムが作動し、1行前のデータより、上書き防止のプログラムが発動した為と判りました。
プログラムの実行を15秒程遅らせる動作を加えると、全くエラーが出なくなりました。

投稿2020/07/10 07:42

kuri63

総合スコア3

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

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

0

ベストアンサー

最近の流行を追っていないのですが 1 年くらい前までは、シート側のフォーム送信時のトリガー発火時点ではシートに値が埋まっていない(シートに最新の回答が書かれていない)現象の報告が、teratail でもときどき発生していました。具体的には下記の return にあたっている現象です。

javascript

1// シート最終行の再編集用URLが記入済みならば処理を中断する。 2if ( sheet.getRange( sheet.getLastRow(), colEditURL ).getValue() != "" ) { 3return; 4}

トリガー発動の記録があるなら、↑の return の前に Logger.log("irregular");とか入れて、ここにきてるか確認してみてはいかがでしょうか。(実際には他のところにも Logger を仕込んで、必要な値が必要なタイミングで取れているかを一度に確認できるようにしたほうがいいとは思いますが)

投稿2020/06/29 13:07

papinianus

総合スコア12705

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

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

kuri63

2020/06/30 13:22

試してみます。ありがとうございました。
kuri63

2020/07/04 07:43

色々試した結果、ifの行でgetLastRow()が、本来の行(書き込みの行)の一つ前を出す事が有り、その時に処理を中断する為に、空白になる所まで、わかりました。 しかし、なぜ一つ前の行が出力されてしまうのかが、どうしても判りません。 何か、推測される原因が有りましたら、ご教授願えればと思います。 よろしくお願いします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問