回答編集履歴

5

 

2022/01/19 02:33

投稿

退会済みユーザー
test CHANGED
@@ -1,5 +1,6 @@
1
1
  質問の内容が、下記のように「複数のメニューに対して同一の関数(clickMenu)を呼び出すようになっており、呼び出し先のclickMenu関数内でどのメニューがクリックされたか判別したい」という意味ならば
2
2
  残念ながらそのような動作を標準的なGASのカスタムメニューでおこなうことはできません。
3
+ https://stackoverflow.com/questions/50946493/how-to-know-which-menu-item-was-clicked
3
4
  ```javascript
4
5
  function onOpen() {
5
6
 
@@ -23,6 +24,7 @@
23
24
  ```
24
25
 
25
26
  下記のようにevalを使って無理やり動的に関数を作成することはできなくもないですが、呼び出し先の関数の処理の汎用性に欠けるため、質問のようなユースケースには対応できないと思われます。
27
+ https://issuetracker.google.com/issues/36753036?pli=1
26
28
  ```
27
29
 
28
30
  //get the student data
@@ -39,4 +41,8 @@
39
41
  }
40
42
  spreadsheet.addMenu("MyMenu", items);
41
43
  }
44
+
45
+ function createQuiz(arg) {
46
+ //
47
+ }
42
48
  ```

4

 

2022/01/19 02:31

投稿

退会済みユーザー
test CHANGED
@@ -25,22 +25,18 @@
25
25
  下記のようにevalを使って無理やり動的に関数を作成することはできなくもないですが、呼び出し先の関数の処理の汎用性に欠けるため、質問のようなユースケースには対応できないと思われます。
26
26
  ```
27
27
 
28
- var menu = [
28
+ //get the student data
29
- { name: 'Create quiz for student one', functionName: 'createQuiz_one' },
29
+ var sData = SpreadsheetApp.getActive().getSheets()[0].getDataRange().getValues();
30
- { name: 'Create quiz for student two', functionName: 'createQuiz_two' }
31
- ];
32
-
33
30
 
34
31
  for(i in sData) {
35
32
  eval("function createQuiz_" + sData[i][0] + "() { createQuiz('" + sData[i][0] + "'); }");
36
33
  }
37
34
 
38
35
  function onOpen() {
39
- //get the student data
40
- var sData = SpreadsheetApp.getActive().getSheets()[0].getDataRange().getValues();
41
36
  var items = [];
42
37
  for(i in sData) {
43
38
  items.push({ name: 'Create Quiz for ' + sData[i][0], functionName: 'createQuiz_' + sData[i][0] });
44
39
  }
40
+ spreadsheet.addMenu("MyMenu", items);
45
41
  }
46
42
  ```

3

 

2022/01/19 02:26

投稿

退会済みユーザー
test CHANGED
@@ -22,7 +22,7 @@
22
22
  }
23
23
  ```
24
24
 
25
- 下記のようにevalを使って無理やり動的に関数を作成することはできなくもないですが、汎用性に欠けるため、質問のようなユースケースには対応できないと思われます。
25
+ 下記のようにevalを使って無理やり動的に関数を作成することはできなくもないですが、呼び出し先の関数の処理の汎用性に欠けるため、質問のようなユースケースには対応できないと思われます。
26
26
  ```
27
27
 
28
28
  var menu = [

2

 

2022/01/19 02:25

投稿

退会済みユーザー
test CHANGED
@@ -1,5 +1,5 @@
1
1
  質問の内容が、下記のように「複数のメニューに対して同一の関数(clickMenu)を呼び出すようになっており、呼び出し先のclickMenu関数内でどのメニューがクリックされたか判別したい」という意味ならば
2
- 残念ながらそのような動作をGASのカスタムメニューでおこなうことはできません。
2
+ 残念ながらそのような動作を標準的なGASのカスタムメニューでおこなうことはできません。
3
3
  ```javascript
4
4
  function onOpen() {
5
5
 
@@ -21,3 +21,26 @@
21
21
  // この中ではどのメニューがクリックされたか判別することはできない。(仕様)
22
22
  }
23
23
  ```
24
+
25
+ 下記のようにevalを使って無理やり動的に関数を作成することはできなくもないですが、汎用性に欠けるため、質問のようなユースケースには対応できないと思われます。
26
+ ```
27
+
28
+ var menu = [
29
+ { name: 'Create quiz for student one', functionName: 'createQuiz_one' },
30
+ { name: 'Create quiz for student two', functionName: 'createQuiz_two' }
31
+ ];
32
+
33
+
34
+ for(i in sData) {
35
+ eval("function createQuiz_" + sData[i][0] + "() { createQuiz('" + sData[i][0] + "'); }");
36
+ }
37
+
38
+ function onOpen() {
39
+ //get the student data
40
+ var sData = SpreadsheetApp.getActive().getSheets()[0].getDataRange().getValues();
41
+ var items = [];
42
+ for(i in sData) {
43
+ items.push({ name: 'Create Quiz for ' + sData[i][0], functionName: 'createQuiz_' + sData[i][0] });
44
+ }
45
+ }
46
+ ```

1

 

2022/01/19 02:21

投稿

退会済みユーザー
test CHANGED
@@ -18,5 +18,6 @@
18
18
 
19
19
  function clickMenu() {
20
20
  // クリック時の処理
21
+ // この中ではどのメニューがクリックされたか判別することはできない。(仕様)
21
22
  }
22
23
  ```