回答編集履歴

5

修正

2021/05/15 12:28

投稿

退会済みユーザー
test CHANGED
@@ -1,8 +1,20 @@
1
- 下記手順試していただけないでしょうか。
1
+ ・2行目(e.response.getRespondentEmail()の行)
2
2
 
3
+ ```
3
4
 
5
+ let address = e.namedValues["メールアドレス"];
4
6
 
7
+ ```
8
+
9
+ に修正した場合どうでしょうか。
10
+
11
+  
12
+
13
+ もしこれでもエラーが発生する場合、下記をさらに試してください。
14
+
15
+  
16
+
5
- 1.下記サイトに記載の方法で、スプレッドシートをフォームと連携させてください:
17
+ 1.下記サイトに記載の方法で、改めてスプレッドシートをフォームと連携させてください:
6
18
 
7
19
   [Googleフォームをスプレッドシートと連携して回答を集計・編集する方法](https://hep.eiz.jp/google-form-spreadsheet-csv/)
8
20
 
@@ -62,9 +74,9 @@
62
74
 
63
75
   ・イベントの種類を選択:「フォーム送信時」
64
76
 
77
+  
65
78
 
66
-
67
-
79
+  
68
80
 
69
81
  # 解説
70
82
 
@@ -76,25 +88,19 @@
76
88
 
77
89
 
78
90
 
79
- フォーム送信トリガーに、**スクリプトを直接紐づけ**するパターンと
91
+ (1)フォーム送信トリガーに、**スクリプトを直接紐づけ**するパターンと
80
92
 
81
- フォーム送信トリガーに、**スプレッドシートを紐づけ**、そのスプレッドシートのスクリプトでデータ加工するパターン
93
+ (2)フォーム送信トリガーに、**スプレッドシートを紐づけ、そのスプレッドシートのスクリプトでデータ加工**するパターン
82
94
 
83
95
  の2つあります。
84
96
 
85
97
 
86
98
 
87
- 結論から言うと、質問者さんがコピペしたスクリプトの前提は、
99
+ 結論から言うと、質問者さんがコピペしたスクリプトの前提は、**2番目(スプレッドシート連携)のパターン**と推測されます。
88
100
 
89
- **2番目スプレッドシート連携)のパターン**と推測され
101
+ しかしながら、`getRespondentEmail()`は、)のパターンでしか使えせん
90
102
 
91
- にもかかわらず、**質問者さんの環境では、スプレッドシートと連携せず、フォームのスクリプトにトリガーを設定しており**(1番目のパターン)、さらに1番目用と2番目用のスクリプトが混ざっているように思われます。
92
-
93
- (`getRespondentEmail()`は、1番目のパターンで使います。
94
-
95
-  `namedValues()`は、2番目のパターンで使ます。
103
+ 逆に`namedValues()`は、(2)のパターンでのみ使ます。
96
-
97
-  これらが混ざっているため、エラーが発生していると推測)
98
104
 
99
105
 
100
106
 

4

追加

2021/05/15 12:27

投稿

退会済みユーザー
test CHANGED
@@ -88,7 +88,13 @@
88
88
 
89
89
  **2番目(スプレッドシート連携)のパターン**と推測されます。
90
90
 
91
- にもかかわらず、**質問者さんの環境では、スプレッドシートと連携せず、フォームのスクリプトにトリガーを設定しており**(1番目のパターン)、さらに1番目と2番目用のスクリプトが混ざっているように思われます(そのため、エラーが発生していると推測)
91
+ にもかかわらず、**質問者さんの環境では、スプレッドシートと連携せず、フォームのスクリプトにトリガーを設定しており**(1番目のパターン)、さらに1番目と2番目用のスクリプトが混ざっているように思われます
92
+
93
+ (`getRespondentEmail()`は、1番目のパターンで使います。
94
+
95
+  `namedValues()`は、2番目のパターンで使います。
96
+
97
+  これらが混ざっているため、エラーが発生していると推測)
92
98
 
93
99
 
94
100
 
@@ -99,3 +105,59 @@
99
105
  2番目は**Google Sheets Events**のForm Submitのイベントオブジェクトが渡されます。
100
106
 
101
107
  参照:https://developers.google.com/apps-script/guides/triggers/events )
108
+
109
+
110
+
111
+
112
+
113
+ -------
114
+
115
+ なお、1番目のパターン(フォームとスクリプト直接連携)で動作させたい場合は、下記のようにします。
116
+
117
+ メールアドレス取得部分は元質問と変わりませんが、タイムスタンプ及び各回答内容を取得する部分が少し複雑になっています。
118
+
119
+ ```
120
+
121
+ // フォームとスクリプト直接連携の場合
122
+
123
+ function sendFormMail(e) {
124
+
125
+ const address = e.response.getRespondentEmail();
126
+
127
+ const resp = {};
128
+
129
+ e.response.getItemResponses().forEach(r => {
130
+
131
+ resp[r.getItem().getTitle()] = r.getResponse();
132
+
133
+ });
134
+
135
+
136
+
137
+ const timeStamp = Utilities.formatDate(e.response.getTimestamp(), 'JST', 'yyyy/MM/dd HH:mm:ss');
138
+
139
+ const name = resp["氏名"];
140
+
141
+ const personAddress = resp["住所"];
142
+
143
+ const tel = resp["電話"];
144
+
145
+
146
+
147
+ let body = "時刻:" + timeStamp + "\n";
148
+
149
+ body += "氏名:"+name+"\n";
150
+
151
+ body += "住所:"+personAddress+"\n";
152
+
153
+ body += "電話:"+tel+"\n";
154
+
155
+ body += "このような回答を受け付けました。\n"
156
+
157
+
158
+
159
+ MailApp.sendEmail(address,"情報確認メール",body);
160
+
161
+ }
162
+
163
+ ```

3

修正

2021/05/15 12:14

投稿

退会済みユーザー
test CHANGED
@@ -8,13 +8,15 @@
8
8
 
9
9
 
10
10
 
11
+ 2.作成されたスプレッドシートに新たにスクリプトを記述します。
12
+
11
- 2.連携時に表示されたスプレッドシートのメニューから「ツール」->「<>スクリプトエディタ」
13
+ 連携時に表示されたスプレッドシートのメニューから「ツール」->「<>スクリプトエディタ」
12
14
 
13
15
  を選択して、スクリプトエディタを呼び出し、
14
16
 
15
- 質問文のスクリプトをのように修正してに記述し、保存してください。
17
+ 記のスクリプトを記述し、保存してください。
16
18
 
17
- (2行目を「 let address=e.namedValues["メールアドレス"];」に修正)
19
+ (2行目を「 let address=e.namedValues["メールアドレス"];」に修正しています
18
20
 
19
21
 
20
22
 

2

2021/05/15 11:41

投稿

退会済みユーザー
test CHANGED
@@ -22,7 +22,7 @@
22
22
 
23
23
  function sendFormMail(e) {
24
24
 
25
- let address=e.namedValues["メールアドレス"];;
25
+ let address=e.namedValues["メールアドレス"];
26
26
 
27
27
  let timeStamp=e.namedValues["タイムスタンプ"];
28
28
 

1

修正

2021/05/15 11:36

投稿

退会済みユーザー
test CHANGED
@@ -12,9 +12,45 @@
12
12
 
13
13
  を選択して、スクリプトエディタを呼び出し、
14
14
 
15
- 質問文記載のスクリプトをスクリプトエディタに記述し、保存してください。
15
+ 質問文記載のスクリプトを下記のよう修正してに記述し、保存してください。
16
+
17
+ (2行目を「 let address=e.namedValues["メールアドレス"];」に修正)
16
18
 
17
19
 
20
+
21
+ ```
22
+
23
+ function sendFormMail(e) {
24
+
25
+ let address=e.namedValues["メールアドレス"];;
26
+
27
+ let timeStamp=e.namedValues["タイムスタンプ"];
28
+
29
+ let name=e.namedValues["氏名"];
30
+
31
+ let personAddress=e.namedValues["住所"];
32
+
33
+ let tel=e.namedValues["電話"];
34
+
35
+ let body="時刻:"+timeStamp+"\n";
36
+
37
+ body+="氏名:"+name+"\n";
38
+
39
+ body+="住所:"+personAddress+"\n";
40
+
41
+ body+="電話:"+tel+"\n";
42
+
43
+ body+="このような回答を受け付けました。\n"
44
+
45
+ MailApp.sendEmail(address,"情報確認メール",body);
46
+
47
+ }
48
+
49
+ ```
50
+
51
+  
52
+
53
+  
18
54
 
19
55
  3.トリガーを追加します。トリガー設定画面で、下記のように設定してください。
20
56
 
@@ -46,16 +82,18 @@
46
82
 
47
83
 
48
84
 
49
- 結論から言うと、質問者さんがコピペしたスクリプトは、
85
+ 結論から言うと、質問者さんがコピペしたスクリプトの前提は、
50
86
 
51
- **2番目(スプレッドシート連携)のパターンのコード**と推測されます。
87
+ **2番目(スプレッドシート連携)のパターン**と推測されます。
52
88
 
53
- にもかかわらず、**質問者さんの環境では、スプレッドシートと連携せず、フォームのスクリプトにトリガーを設定していた**(1番目のパターン)のではなでしょ(そのため、エラーが発生していると推測)
89
+ にもかかわらず、**質問者さんの環境では、スプレッドシートと連携せず、フォームのスクリプトにトリガーを設定しており**(1番目のパターン)、さらに1番目と2番目用スクリプトが混ざってるよに思われます(そのため、エラーが発生していると推測)
54
90
 
55
91
 
56
92
 
57
93
  (難しい話をすると、1番目のパターンと2番目のパターンでは、トリガーに設定した関数に渡される引数(イベントオブジェクト)が異なります。
58
94
 
59
- 参照:https://developers.google.com/apps-script/guides/triggers/events
95
+ 1番目はGoogle Forms EventsのForm Submitのイベントオブジェクトが渡されますが、
60
96
 
97
+ 2番目は**Google Sheets Events**のForm Submitのイベントオブジェクトが渡されます。
98
+
61
-
99
+ 参照:https://developers.google.com/apps-script/guides/triggers/events