トリガー
イベントソースの選択:スプレッドシートから
イベントの種類を選択:フォームの送信時
を設定したとき、フォームの内容は、namedValuesというオブジェクトで渡されます。
そして、複数チェックボックス以外のアンケート項目は
e.namedValues['質問項目'][0];
という書き方で、回答を取り出せます。
例えばフォームの質問項目(タイトル)が「名前」「Email」である場合、
名前とEmailは下記のようにして取得できます。
js
1 function sendReply ( e ) {
2
3 const ss = SpreadsheetApp . getActiveSpreadsheet ( ) ;
4 const sheet = ss . getSheetByName ( '回答内容とurl生成のセルがあるシート' ) ;
5
6 const answeredName = e . namedValues [ '名前' ] [ 0 ] ; // 回答されたお名前
7 const answeredEmail = e . namedValues [ 'Email' ] [ 0 ] ; // 回答されたEmail
8
9 以下略
#追記
フォームの解答以外のセルを出力するにはどうしたら良いかがわかりません。
フォーム送信して新しいデータが最下行に追加された時、O列に入っている式が計算される前(ARRAYFORMULAが走る前)にスクリプトが実行されて、空白セルとしてデータが読み取られてしまっているのが原因と思われます。
解決方法として、O列に入っている数式と同じものを、スクリプト上で組み立てるやり方が考えられます。
※下記のコード内の'XX列の質問項目' は、実際のフォームの質問項目に変えてください。
(3行目にnamedValuesの内容をログ出力するコードを追加したので、その出力を参考に)
js
1 function sendReply ( e ) {
2 // 追加
3 console . log ( JSON . stringify ( e . namedValues , undefined , 1 ) // フォームの質問項目の内容を出力
4
5 const ss = SpreadsheetApp . getActiveSpreadsheet ( ) ;
6 const sheet = ss . getSheetByName ( '回答内容とurl生成のセルがあるシート' ) ;
7
8 const answeredName = e . namedValues [ '名前' ] [ 0 ] ; // 回答されたお名前
9 const answeredEmail = e . namedValues [ 'Email' ] [ 0 ] ; // 回答されたEmail
10 const ownName = '自分の名前' // こちらの名前
11 const title = "タイトル件名"
12
13 // -------追加-------
14 // 'XX列の質問項目' は、実際のフォームの各質問項目に変えてください。
15 const C = encodeURI ( e . namedValues [ 'C列の質問項目' ] [ 0 ] ) ;
16 const D = encodeURI ( e . namedValues [ 'D列の質問項目' ] [ 0 ] ) ;
17 const F = encodeURI ( e . namedValues [ 'F列の質問項目' ] [ 0 ] ) ;
18 const G = encodeURI ( e . namedValues [ 'G列の質問項目' ] [ 0 ] ) ;
19 const H = encodeURI ( e . namedValues [ 'H列の質問項目' ] [ 0 ] ) ;
20 const I = encodeURI ( e . namedValues [ 'I列の質問項目' ] [ 0 ] ) ;
21 const J = encodeURI ( e . namedValues [ 'J列の質問項目' ] [ 0 ] ) ;
22 const K = encodeURI ( e . namedValues [ 'K列の質問項目' ] [ 0 ] ) ;
23 const L = encodeURI ( e . namedValues [ 'L列の質問項目' ] [ 0 ] ) ;
24 const M = encodeURI ( e . namedValues [ 'M列の質問項目' ] [ 0 ] ) ;
25 const N = encodeURI ( e . namedValues [ 'N列の質問項目' ] [ 0 ] ) ;
26
27 const url = "https://docs.google.com/forms/d/e/Googleフォームのキー/viewform?usp=pp_url&entry.2145272979="
28 + C + "&entry.918876992=" + D
29 + "&entry.965629543=" + F
30 + "&entry.789231669=" + G
31 + "&entry.55383597=" + H
32 + "&entry.343743215=" + I
33 + "&entry.1212281365=" + J
34 + "&entry.2139868976=" + K
35 + "&entry.36015981=" + L
36 + "&entry.2091679258=" + M
37 + "&entry.269090822=" + N
38
39 // -------追加ここまで-------
40
41 const body = `
42 ${ answeredName } 様
43
44 メール本文
45
46 ${ url }
47 `
48 GmailApp . sendEmail ( answeredEmail , title , body )
49
50 (以下略)
51
52 }
「'XX列の質問項目' は、実際のフォームの各質問項目に変えてください。」というのは下のような意味です。
たとえばフォームが図のような質問だと仮定します。
このとき、色の枠で囲った部分を、それぞれe.namedValues['○○']の「○○」に入れてください、という意味です。
const C = encodeURI(e.namedValues['好きな果物は何ですか?'][0]);
const D = encodeURI(e.namedValues['好きな動物は何ですか?'][0]);
const F = encodeURI(e.namedValues['好きな野菜はなんですか?'][0]);
const G = ...
...
..
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/12/10 23:27
退会済みユーザー
2021/12/10 23:58 編集
2021/12/12 07:39
退会済みユーザー
2021/12/12 08:03
2021/12/13 13:17 編集
退会済みユーザー
2021/12/13 15:15
2021/12/14 07:25