0

イベントにサインアップするための Web フォームを作成しています。このタスクには Google フォームと Google スプレッドシートを使用できることがわかり、これらの Web アプリケーションの使用方法を学び始めました。また、サインアップした方には自動確認メールを送信したいと思います。このタスクのために、Google Apps Script も検討しています。私が理解している限り、スプレッドシートのスクリプトで電子メールを送信する関数を定義し、「フォーム送信イベント」でこの関数をトリガーする必要があります。送信したデータから登録者のメールアドレスを特定したいのですが、確認メールに送信したデータすべてとタイムスタンプを含めたいです。

私の質問は次のとおりです。

  • フォームの入力フィールドの値が格納されているスプレッドシートのセルを特定するにはどうすればよいですか?
  • または、Google Apps Script からそれぞれの入力フィールドの値を読み取る方法はありますか?

これらの質問に関連する明確な API リファレンスを参照していただければ幸いです。

これまでのところ、Google ドライブで提供されているヘルプ ページからアプリケーションについて学びました。

https://developers.google.com/apps-script/overview

しかし、そこにある文書は簡潔すぎるように感じます。

この Google Apps スクリプトから確認メールを送信する方法を学んでいます: FormSubmissionResponseEmail

Google フォームの入力フィールドと Google スプレッドシートのセルを明示的に関連付けるヘルプ ドキュメントは見つかりませんでした。私の限られた数の実験ケースから、タイムスタンプは常にスプレッドシートの最初の列に保存されているようです。これは保証されていますか?「スプレッドシートフォーム送信イベント」クラスの「namedValues」メンバーには、「フォーム送信からの質問名と値」が含まれていると言われているようです。( https://developers.google.com/apps-script/understanding_events ) しかし、Google フォームを変更したところ、'namedValues' メンバーは削除された入力フィールドに対応する要素を保持していました。ユーザーが実際に入力したフィールドに対応する「namedValues」の要素のみをループする方法はありますか?

また、Google フォームや Google スプレッドシートに代わるツールについても教えていただければ幸いです。

4

1 に答える 1

2

この回答は、廃止された「レガシー フォーム」ではなく、2013 バージョンの「新しいフォーム」に適用されます。

フォームの入力フィールドの値が格納されているスプレッドシートのセルを特定するにはどうすればよいですか?

フォームの質問に対する回答を収集する列は、行 1 のラベルで識別できます。その知識があれば、 などの関数で列番号で回答を参照できますgetRange()

...Google Apps Script からそれぞれの入力フィールドの値を読み取る方法はありますか?

入力値を参照するには、複数の方法があります。

  • イベントについてで説明したように、フォーム送信によってトリガーされる関数を使用すると、イベント自体から入力値を取得できます。ここに 2 つのオプションがあります。のセットをvalues配列で取得namedValuesし、質問テキストを名前として使用して参照できます。

  • スプレッドシートからデータを読み取ることができます。前述の同じトリガー関数内でe.range.getValues()、送信されたすべての値を含む配列を取得するために使用でき、それをインデックスで参照できます。列番号は 1 から始まりますが、これは 0 ベースの配列になることに注意してください。

私の限られた数の実験ケースから、タイムスタンプは常にスプレッドシートの最初の列に保存されているようです。これは保証されていますか?

スプレッドシートを変更しない限り、タイムスタンプは最初の列になります。フォームによって作成されたデータ テーブルの左側に列を挿入することができます。これは、シート内でフォームの結果が表示される場所に影響します (ただし、e.range調整されます)。以下のすべての値の順序は、フォームで質問が作成された順序になります。列を削除すると (フォームから質問を削除したなどの理由で)、「削除された」質問の列が行の最後に再作成されることに注意してください。

...Google フォームを変更したとき、「namedValues」メンバーは、削除された入力フィールドに対応する要素を保持していました。namedValuesユーザーが実際に入力したフィールドに対応する要素のみをループする方法はありますか?

過去の質問を覚えておくのには理由がありますが、実際のデータを収集するのに慣れていない場合は面倒です。問題を回避するために、より適切な計画を使用できます。

未回答の質問は、イベント内で空の文字列になります (例: e.namedValues["Dead Question"] == '')。したがって、次のようにスキップできます。

for (var ans in e.namedValues) {
  if (e.namedValues[ans] != '') {
    doSomethingWith(e.namedValues[ans]
  }
}

次のように、「ヘッダー」の配列またはフォームの質問を取得できることにも注意してください。

var sheet = SpreadsheetApp.getActiveSpreadsheet();
var headers = sheet.getDataRange().getValues()[0];

...そして検索を使用して、探しheadersている回答を含む列を見つけます。

于 2013-04-10T02:24:18.193 に答える