回答編集履歴

16

 

2023/01/29 10:13

投稿

退会済みユーザー
test CHANGED
@@ -27,7 +27,7 @@
27
27
  const index = HtmlService.createTemplateFromFile('index');
28
28
 
29
29
  // テンプレートファイルに値を渡す。
30
- index.value1 = 'おはよう';
30
+ index.value1 = 'おはよう';
31
31
 
32
32
  // ページを構築して返す。
33
33
  return index.evaluate();

15

 

2023/01/29 10:13

投稿

退会済みユーザー
test CHANGED
@@ -180,7 +180,7 @@
180
180
  このとき、「[**formdata イベント**](https://developer.mozilla.org/ja/docs/Web/API/HTMLFormElement/formdata_event)」が発生し、index.html の<script>タグ内に記述した「イベントハンドラー」が実行されます。
181
181
  「イベントハンドラー」というのは、「イベントを処理するための関数」という意味で、具体的には下記の 「(e) => { 」以降の部分です。
182
182
 
183
- この関数の中で、フォームに送信するデータ(item_dict)をセットしています。
183
+ この関数の中で、送信するデータ(item_dict)をセットしています。
184
184
  複数のオブジェクトを送るため、`JSON.stringfy` でJSON文字列に変換しています。
185
185
  ```js
186
186
  // フォーム送信時に発生する 'formdata' イベントを処理する関数(イベントハンドラー)を実装

14

 

2023/01/29 00:06

投稿

退会済みユーザー
test CHANGED
@@ -28,10 +28,13 @@
28
28
 
29
29
  // テンプレートファイルに値を渡す。
30
30
  index.value1 = 'おはよう';
31
- index.value2 = 'おやすみ';
32
31
 
33
32
  // ページを構築して返す。
34
33
  return index.evaluate();
34
+ }
35
+
36
+ function getMessage() {
37
+ return 'おやすみ';
35
38
  }
36
39
  ```
37
40
 
@@ -44,12 +47,13 @@
44
47
  </head>
45
48
  <body>
46
49
  <h1><?= value1 ?></h1>
47
- <h1><?= value2 ?></h1>
50
+ <h1><?= getMessage() ?></h1>
48
51
  </body>
49
52
  </html>
50
53
  ```
51
54
 
52
- のよすることで、HTML の `<?= ?>` で囲まれた部分の変数に任意の値を渡し表示できます。
55
+ こうすることで、HTML の `<?= ?>` で囲まれた部分に任意の値を渡したり、GAS側で用意した関数の計算結果を表示したりできます。
56
+ (※ただし、`<?= ?>`部分の置き換えはページを読み込んで構築する時だけ行われますので、たとえばページ表示後、動的に`<?= ?>`部分を変更するということはできません)
53
57
 
54
58
  ---
55
59
  createTemplateFromFile 関数の基本:

13

 

2023/01/28 11:39

投稿

退会済みユーザー
test CHANGED
@@ -53,7 +53,7 @@
53
53
 
54
54
  ---
55
55
  createTemplateFromFile 関数の基本:
56
- + `<?= ?>` が使われているHTML(テンプレートファイル)の `<?= ?>` の部分を渡された値に置き換えて、ページを構築します。
56
+ + `<?= ?>` が使われているHTML(テンプレートファイル)の `<?= ?>` の部分を、GAS 側の変数や関数の計算結果、または渡された値に置き換えて、ページを構築します。
57
57
  + ページを返すときに、evaluate() 関数を使う必要があります。
58
58
  ---
59
59
 

12

2023/01/27 23:45

投稿

退会済みユーザー
test CHANGED
@@ -86,7 +86,7 @@
86
86
  /* フォーム送信時に呼ばれる */
87
87
  function doPost(e) {
88
88
  // フォームから受け取ったデータ(JSONフォーマットの文字列)を取出す。
89
- const item_dict_json = e.parameters.item_dict;
89
+ const item_dict_json = e.parameter.item_dict;
90
90
 
91
91
  // JSONフォ-マットの文字列を、オブジェクトに戻す。
92
92
  const item_dict = JSON.parse(item_dict_json);
@@ -196,14 +196,14 @@
196
196
  /* フォーム送信時に呼ばれる */
197
197
  function doPost(e) {
198
198
  // フォームから受け取ったデータ(JSONフォーマットの文字列)を取り出す。
199
- const item_dict_json = e.parameters.item_dict;
199
+ const item_dict_json = e.parameter.item_dict;
200
200
 
201
201
  // JSONフォーマットの文字列を、オブジェクトに戻す。
202
202
  const item_dict = JSON.parse(item_dict_json);
203
203
  以下略
204
204
  ```
205
205
  doPost関数の引数 「e」には、先ほどのイベントハンドラー内でセットしたフォームデータが含まれています。
206
- これを取り出すには `e.parameters.変数名` というようにします。
206
+ これを取り出すには `e.parameter.変数名` というようにします。
207
207
 
208
208
  取り出されるのは、JSON.stgringify によって JSON 文字列に変換されたデータなので、これをオブジェクトにもどすために JSON.parse しています。
209
209
 

11

 

2023/01/27 17:50

投稿

退会済みユーザー
test CHANGED
@@ -126,7 +126,7 @@
126
126
  address: '東京都新宿区○ ○',
127
127
  };
128
128
 
129
- // フォーム送信時に呼ばれる 'formdata' イベントを処理する関数(イベントハンドラー)を実装
129
+ // フォーム送信時に発生する 'formdata' イベントを処理する関数(イベントハンドラー)を実装
130
130
  document.getElementById('form').addEventListener('formdata', (e) => {
131
131
  // フォームデ-タを格納するオブジェクト(FormDataオブジェクト)への参照を取得
132
132
  const fd = e.formData;
@@ -179,7 +179,7 @@
179
179
  この関数の中で、フォームに送信するデータ(item_dict)をセットしています。
180
180
  複数のオブジェクトを送るため、`JSON.stringfy` でJSON文字列に変換しています。
181
181
  ```js
182
- // フォーム送信時に呼ばれる 'formdata' イベントを処理する関数(イベントハンドラー)を実装
182
+ // フォーム送信時に発生する 'formdata' イベントを処理する関数(イベントハンドラー)を実装
183
183
  document.getElementById('form').addEventListener('formdata', (e) => {
184
184
  // フォームデ-タを格納するオブジェクト(FormDataオブジェクト)への参照を取得
185
185
  const fd = e.formData;
@@ -190,7 +190,7 @@
190
190
  ```
191
191
 
192
192
 
193
- (3)フォームを送信すると、今度は GAS 側の doPost 関数が実行されます。
193
+ (3)フォームを送信すると、(form 要素の action 属性に指定した URL に基づき) GAS 側の doPost 関数が実行されます。
194
194
 
195
195
  ```js
196
196
  /* フォーム送信時に呼ばれる */

10

 

2023/01/27 16:06

投稿

退会済みユーザー
test CHANGED
@@ -172,7 +172,7 @@
172
172
  (こうすることで、フォームデータを GAS のデプロイURLで受け取れる)
173
173
 
174
174
 
175
- (2)「送信」ボタンを押すと、フォームデータが送信されます。
175
+ (2)「送信」ボタンを押すと、フォームデータが form 要素の action 属性に指定した URL に対して送信されます。
176
176
  このとき、「[**formdata イベント**](https://developer.mozilla.org/ja/docs/Web/API/HTMLFormElement/formdata_event)」が発生し、index.html の<script>タグ内に記述した「イベントハンドラー」が実行されます。
177
177
  「イベントハンドラー」というのは、「イベントを処理するための関数」という意味で、具体的には下記の 「(e) => { 」以降の部分です。
178
178
 
@@ -181,7 +181,7 @@
181
181
  ```js
182
182
  // フォーム送信時に呼ばれる 'formdata' イベントを処理する関数(イベントハンドラー)を実装
183
183
  document.getElementById('form').addEventListener('formdata', (e) => {
184
- // フォームデタを格納するオブジェクトを取得
184
+ // フォームデタを格納するオブジェクト(FormDataオブジェクト)への参照を取得
185
185
  const fd = e.formData;
186
186
 
187
187
  // フォーム送信先(コード.gs の doPost 関数)に送信するデータをセット

9

 

2023/01/27 15:45

投稿

退会済みユーザー
test CHANGED
@@ -85,10 +85,10 @@
85
85
 
86
86
  /* フォーム送信時に呼ばれる */
87
87
  function doPost(e) {
88
- // フォームから受け取ったデータ(JSONフォーマットの文字列)を取出す。
88
+ // フォームから受け取ったデータ(JSONフォーマットの文字列)を取出す。
89
89
  const item_dict_json = e.parameters.item_dict;
90
90
 
91
- // JSONフォマットの文字列を、オブジェクトに戻す。
91
+ // JSONフォマットの文字列を、オブジェクトに戻す。
92
92
  const item_dict = JSON.parse(item_dict_json);
93
93
 
94
94
  // テンプレートファイルを読み込む
@@ -123,15 +123,15 @@
123
123
  // 送信用のデータ。
124
124
  let item_dict = {
125
125
  date: '2023/01/01',
126
- address: '東京都新宿区○○',
126
+ address: '東京都新宿区○ ○',
127
127
  };
128
128
 
129
129
  // フォーム送信時に呼ばれる 'formdata' イベントを処理する関数(イベントハンドラー)を実装
130
130
  document.getElementById('form').addEventListener('formdata', (e) => {
131
- // フォームデタを格納するオブジェクト(FormDataオブジェクト)への参照を取得
131
+ // フォームデタを格納するオブジェクト(FormDataオブジェクト)への参照を取得
132
132
  const fd = e.formData;
133
133
 
134
- // フォーム送信先(result.html)に送信するデータをセット
134
+ // フォーム送信先(result.html)に送信するデータをセット.
135
135
  fd.set('item_dict', JSON.stringify(item_dict));
136
136
  });
137
137
  </script>

8

 

2023/01/27 15:44

投稿

退会済みユーザー
test CHANGED
@@ -128,7 +128,7 @@
128
128
 
129
129
  // フォーム送信時に呼ばれる 'formdata' イベントを処理する関数(イベントハンドラー)を実装
130
130
  document.getElementById('form').addEventListener('formdata', (e) => {
131
- // フォームデータを格納するオブジェクトを取得
131
+ // フォームデータを格納するオブジェクト(FormDataオブジェクト)への参照を取得
132
132
  const fd = e.formData;
133
133
 
134
134
  // フォーム送信先(result.html)に送信するデータをセット

7

  

2023/01/27 15:39

投稿

退会済みユーザー
test CHANGED
@@ -168,7 +168,8 @@
168
168
  (1)GASでデプロイして発行したURLをブラウザに入力すると、コード.gs の doGet関数が呼ばれ、index.html が返されます。
169
169
  このとき、index.html内の form要素の `<?= url ?>` の部分を、GAS Web アプリのデプロイURL に置き換えています。
170
170
 
171
- なぜこのようにするかといえば、フォーム送信時に、**form 要素の action 属性に指定した URL** に対してフォームデータが POST されるように設定するためです。
171
+ なぜこのようにするかといえば、フォーム送信時に、**form 要素の action 属性に指定した URL** に対してフォームデータが POST されるためです。
172
+ (こうすることで、フォームデータを GAS のデプロイURLで受け取れる)
172
173
 
173
174
 
174
175
  (2)「送信」ボタンを押すと、フォームデータが送信されます。

6

 

2023/01/27 15:34

投稿

退会済みユーザー
test CHANGED
@@ -7,7 +7,7 @@
7
7
 
8
8
  ---
9
9
 
10
- 下記のコードは基本的な動作を理解していただく目的のために簡略化しています。(簡略といっても省略しているわけではなく、コピペしてデプロイすれば動作します)。実際には動作を理解した上で、質問者さんのアプリに適用してください。
10
+ 下記のコードは基本的な動作を理解していただく目的のために簡略化しています。(簡略といっても省略しているわけではなく、コピペしてデプロイすれば動作します)。実際には動作を理解した上で、質問者さんのアプリに適用してください。また、コード中のコメントが冗長になっていますが説明のためですので、御承知おきください。
11
11
 
12
12
  ---
13
13
 
@@ -18,16 +18,19 @@
18
18
  [**createTemplateFromFile**](https://developers.google.com/apps-script/reference/html/html-service#createtemplatefromfilefilename) を使います。
19
19
 
20
20
 
21
- 以下は動作するサンプルコードです。ためしに新しいファイルに記述してWebアプリとしてデプロイすると動作がわかりやすいかと思います。
21
+ 以下は動作するサンプルコードです。ためしに新しいファイルに記述してWebアプリとしてデプロイすると動作がわかりやすいかと思います。
22
22
 
23
23
  <コード.gs>
24
24
  ```js
25
25
  function doGet() {
26
+ // テンプレートファイルを読み込む
26
27
  const index = HtmlService.createTemplateFromFile('index');
28
+
27
29
  // テンプレートファイルに値を渡す。
28
30
  index.value1 = 'おはよう';
29
31
  index.value2 = 'おやすみ';
32
+
30
- // ページを返す。
33
+ // ページを構築して返す。
31
34
  return index.evaluate();
32
35
  }
33
36
  ```
@@ -71,9 +74,12 @@
71
74
  ```js
72
75
  /* 初期ページ表示時に呼ばれる */
73
76
  function doGet(e) {
77
+ // テンプレートファイルを読み込む
74
78
  var index = HtmlService.createTemplateFromFile("index");
75
79
  // WebアプリのURLを index.html に渡す。
76
80
  index.url = ScriptApp.getService().getUrl();
81
+
82
+ // ページを構築して返す
77
83
  return index.evaluate();
78
84
  }
79
85
 
@@ -84,14 +90,15 @@
84
90
 
85
91
  // JSONフォーマットの文字列を、オブジェクトに戻す。
86
92
  const item_dict = JSON.parse(item_dict_json);
93
+
87
-
94
+ // テンプレートファイルを読み込む
88
95
  const result = HtmlService.createTemplateFromFile("result");
89
96
 
90
97
  // フォームから受け取ったデータを result.html に渡す。
91
98
  result.date = item_dict.date;
92
99
  result.address = item_dict.address;
93
100
 
94
- // ページを返す
101
+ // ページを構築して返す
95
102
  return result.evaluate();
96
103
  }
97
104
  ```

5

 

2023/01/27 15:28

投稿

退会済みユーザー
test CHANGED
@@ -165,8 +165,8 @@
165
165
 
166
166
 
167
167
  (2)「送信」ボタンを押すと、フォームデータが送信されます。
168
- このとき、「[**formdata イベント**](https://developer.mozilla.org/ja/docs/Web/API/HTMLFormElement/formdata_event)」が発生し、index.html の<script>タグ内に記述した「イベントハンドラ」が実行されます。
168
+ このとき、「[**formdata イベント**](https://developer.mozilla.org/ja/docs/Web/API/HTMLFormElement/formdata_event)」が発生し、index.html の<script>タグ内に記述した「イベントハンドラ」が実行されます。
169
- 「イベントハンドラ」というのは、「イベントを処理するための関数」という意味で、具体的には下記の 「(e) => { 」以降の部分です。
169
+ 「イベントハンドラ」というのは、「イベントを処理するための関数」という意味で、具体的には下記の 「(e) => { 」以降の部分です。
170
170
 
171
171
  この関数の中で、フォームに送信するデータ(item_dict)をセットしています。
172
172
  複数のオブジェクトを送るため、`JSON.stringfy` でJSON文字列に変換しています。
@@ -194,7 +194,7 @@
194
194
  const item_dict = JSON.parse(item_dict_json);
195
195
  以下略
196
196
  ```
197
- doPost関数の引数 「e」には、先ほどのイベントハンドラ内でセットしたフォームデータが含まれています。
197
+ doPost関数の引数 「e」には、先ほどのイベントハンドラ内でセットしたフォームデータが含まれています。
198
198
  これを取り出すには `e.parameters.変数名` というようにします。
199
199
 
200
200
  取り出されるのは、JSON.stgringify によって JSON 文字列に変換されたデータなので、これをオブジェクトにもどすために JSON.parse しています。

4

 

2023/01/27 15:25

投稿

退会済みユーザー
test CHANGED
@@ -165,7 +165,7 @@
165
165
 
166
166
 
167
167
  (2)「送信」ボタンを押すと、フォームデータが送信されます。
168
- このとき、formdata イベントが発生し、index.html の<script>タグ内にあるformdataイベントハンドラ」が実行されます。
168
+ このとき、「[**formdata イベント**](https://developer.mozilla.org/ja/docs/Web/API/HTMLFormElement/formdata_event)」が発生し、index.html の<script>タグ内に記述した「イベントハンドラ」が実行されます。
169
169
  「イベントハンドラ」というのは、「イベントを処理するための関数」という意味で、具体的には下記の 「(e) => { 」以降の部分です。
170
170
 
171
171
  この関数の中で、フォームに送信するデータ(item_dict)をセットしています。
@@ -176,7 +176,7 @@
176
176
  // フォームデータを格納するオブジェクトを取得
177
177
  const fd = e.formData;
178
178
 
179
- // フォーム送信先(result.html)に送信するデータをセット
179
+ // フォーム送信先(コード.gs の doPost 関数)に送信するデータをセット
180
180
  fd.set('item_dict', JSON.stringify(item_dict));
181
181
  });
182
182
  ```

3

 

2023/01/27 15:22

投稿

退会済みユーザー
test CHANGED
@@ -159,9 +159,9 @@
159
159
  ---
160
160
  流れとしては以下のようになります。
161
161
  (1)GASでデプロイして発行したURLをブラウザに入力すると、コード.gs の doGet関数が呼ばれ、index.html が返されます。
162
- このとき、index.html内の form要素の `<?= url ?>` の部分を、doGet関数中で渡されたデプロイURLに置き換えています。
162
+ このとき、index.html内の form要素の `<?= url ?>` の部分を、GAS Web アプリのデプロイURL に置き換えています。
163
-
163
+
164
- なぜこのようにするかといえば、フォーム送信時に、**form 要素の action 属性に指定した URL** に対してフォームデータが POST されるからです。
164
+ なぜこのようにするかといえば、フォーム送信時に、**form 要素の action 属性に指定した URL** に対してフォームデータが POST されるように設定するためです。
165
165
 
166
166
 
167
167
  (2)「送信」ボタンを押すと、フォームデータが送信されます。

2

 

2023/01/27 15:20

投稿

退会済みユーザー
test CHANGED
@@ -51,7 +51,7 @@
51
51
  ---
52
52
  createTemplateFromFile 関数の基本:
53
53
  + `<?= ?>` が使われているHTML(テンプレートファイル)の `<?= ?>` の部分を渡された値に置き換えて、ページを構築します。
54
- + ページを返すときに、evaluate() 関数を使ます。
54
+ + ページを返すときに、evaluate() 関数を使う必要があります。
55
55
  ---
56
56
 
57
57
 
@@ -60,7 +60,8 @@
60
60
 
61
61
  ではフォームの submit(=送信時)に任意のデータ(今回でいえば領収書内に記載する金額やユーザー情報等のデータ)を渡すにはどうすればよいでしょうか。
62
62
 
63
- これには複数のやり方がありますが、[**formdata イベント**](https://developer.mozilla.org/ja/docs/Web/API/HTMLFormElement/formdata_event)を利用してみるのはいかがでしょうか。[※質問文記載のアプリの動作を考察すると、ユーザーに文字を手入力させる要素がなく、特に入力内容のチェックも不要であるようなので、その前提でこの方法を採用します]
63
+ これには複数のやり方がありますが、[**formdata イベント**](https://developer.mozilla.org/ja/docs/Web/API/HTMLFormElement/formdata_event)を利用してみるのはいかがでしょうか。
64
+ (注:質問文記載のアプリの動作を考察すると、ユーザーに文字を手入力させる要素がなく、特に入力内容のチェックも不要であるようなので、その前提でこの方法を採用しています。仮に入力値をチェック(バリデーション)する必要があるような場合は、別の方法になります)
64
65
 
65
66
  具体的には、formdata イベントのイベントハンドラー内に「送信したいデータをフォームデータに追加する処理」を記述する、ということです。
66
67
 

1

コードタグ修正 HTML→html

2023/01/27 15:18

投稿

退会済みユーザー
test CHANGED
@@ -33,7 +33,7 @@
33
33
  ```
34
34
 
35
35
  <index.html>
36
- ```HTML
36
+ ```html
37
37
  <!DOCTYPE html>
38
38
  <html>
39
39
  <head>
@@ -96,7 +96,7 @@
96
96
  ```
97
97
 
98
98
  <index.html>
99
- ```HTML
99
+ ```html
100
100
  <!DOCTYPE html>
101
101
  <html>
102
102
 
@@ -133,7 +133,7 @@
133
133
  ```
134
134
 
135
135
  <result.html>
136
- ```HTML
136
+ ```html
137
137
  <!DOCTYPE html>
138
138
  <!-- 返却用html -->
139
139
  <html>