質問の内容が、下記のように「複数のメニューに対して同一の関数(clickMenu)を呼び出すようになっており、呼び出し先のclickMenu関数内でどのメニューがクリックされたか判別したい」という意味ならば
残念ながらそのような動作を標準的なGASのカスタムメニューでおこなうことはできません。
https://stackoverflow.com/questions/50946493/how-to-know-which-menu-item-was-clicked
javascript
1function onOpen() {
2
3 var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
4
5 // メニュー項目を定義
6 var supplierA = [
7 {name : "ユーザー1" , functionName : "clickMenu"},
8 {name : "ユーザー2" , functionName : "clickMenu"},
9 {name : "ユーザー3" , functionName : "clickMenu"}
10 ];
11
12 // メニューに追加
13 spreadsheet.addMenu("サプライヤ あ", supplierA);
14}
15
16function clickMenu() {
17 // クリック時の処理
18 // この中ではどのメニューがクリックされたか判別することはできない。(仕様)
19}
下記のようにevalを使って無理やり動的に関数を作成することはできなくもないですが、呼び出し先の関数の処理の汎用性に欠けるため、質問のようなユースケースには対応できないと思われます。
https://issuetracker.google.com/issues/36753036?pli=1
//get the student data
var sData = SpreadsheetApp.getActive().getSheets()[0].getDataRange().getValues();
for(i in sData) {
eval("function createQuiz_" + sData[i][0] + "() { createQuiz('" + sData[i][0] + "'); }");
}
function onOpen() {
var items = [];
for(i in sData) {
items.push({ name: 'Create Quiz for ' + sData[i][0], functionName: 'createQuiz_' + sData[i][0] });
}
spreadsheet.addMenu("MyMenu", items);
}
function createQuiz(arg) {
//
}
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2022/01/19 02:46 編集