フォームしたい(FormApp
)
回答後のメッセージをカスタマイズしたい
function set_confirmation_message() {
const from = FormApp.getActive();
const doc = DocumentApp.openById("ドキュメントID");
const txt = doc.getBody().getText();
Logger.info(txt);
form.setConfirmationMessage(txt)
}
フォーム回答後のメッセージはカスタマイズできます。
フォームの設定からもできますが、メッセージで改行ができません。
複雑な文章を掲載したい場合は、本文をGoogleドキュメントで作成し、setConfirmationMessage
で読み込ませるとよいでしょう。
ドキュメントの内容を変更した場合は、再度[実行]
を押し、読み込ませる必要があります。
フォーム入力時にデータを取得したい
function onFormSubmit(e) {
// タイムスタンプ
const timestamp = e.response.getTimeStamp();
const datetime = Utilities.formatDate(timestamp, "JST", "yyyy-MM-dd'T'HH:mm:ss")
// 回答したメールアドレス
const respondentEmail = e.response.getRespondentEmail();
// 回答内容
const itemResponses = e.response.getItemResponses();
const responses = itemResponses.map(function(itemResponse) {
return itemResponse.getResponse();
});
}
フォームに入力があった場合のデータはonFormSubmit関数
で取得&操作できます。
e.response
はFormResponseクラスで、この変数からから情報を取得できます。
入力時のタイムスタンプはgetTimeStamp
で取得できます。
そのままだと日付の表示形式が米国風なので、Utilities.formatDateを使ってISO8601形式に変換しています。
MM
が月で、mm
が分です(Pythonと逆なので紛らわしいです)
回答内容はgetItemResponsesで得られるItemResponseクラスに入っています。
ウェブを検索するとe.values
で回答内容を取得できるという記事を見かけるのですが、Undefined
が返ってきます。
適切なドキュメントが見つけられないので、itemResponses.map
して、回答内容を配列にしています。
参考
itemResponses.map(...)
している部分は、おそらくPythonのリスト内容表表記と同じことをしているはずです。
1responses = [itemResponse.getResponse() for itemResponse in itemResponses]
フォーム入力時にカスタムメールを送信したい
function onFormSubmit(e) {
const message = response_to_text(e.response);
// test_send_to_group(message);
send_to_group(message);
}
上述したonFormSubmit関数
で取得したe.response
を実際に活用する方法です。
おそらく、フォームに入力があった場合には、メールやSlackなどで関係者に通知したいことが多いと思います。
参考
Googleフォームの共同編集者にアサインしたアカウントであれば、標準機能を使って各人で通知設定の可否を設定できます。 また、回答者に回答内容のコピーを自動で送信できます。 今回のケースは「カスタム」したメッセージなどを送りたいケースを想定しています。