如何使用循环子菜单的 java 脚本添加项目菜单,就像这个例子“.addItem("Go to This Sheet", "S"+i+"GoToS")”?

How to adding item menus with the java script of an loop's sub menus inside like this example ".addItem("Go to This Sheet", "S"+i+"GoToS")"?

嗨,大家 .. 我有一个关于 在 GAS(Google Apps 脚本)中创建菜单以实现 Google 电子表格 没有三个脚本,这已经走了很长一段路,也耗费了我的精力,我创建了很多很多这样的脚本行。这是脚本。这是代码:

function Menu1() {
var ui = s.getUi(),
    s = SpreadsheetApp,
    ss = s.getAcgtiveSpreadsheet(),
    sss = ss.getSheets(),
    madeMenu = ui.createMenu('Sheet Tools Just For an Example Menus');

 for (var i=0; i < sss.length; i++){
   madeMenu.addSubMenu(ui.createMenu(sss[i].getName())
      .addItem('Go to ...', 'S'+i+'GoToS')
      .addItem('Rename ...', 'S'+i+'RenameS')
      .addItem('Move ...', 'S'+i+'MoveS'))
   madeMenu.addToUi();
  }
}
function GoToS(getSheetNumber) {
  var sheet = sss[getSheetNumber];
  ss.setActiveSheet(sheet);
}


这是我的主要问题!!! 因为脚本的这些结构,所以让我不得不创建这些行。看下面:

function S0GoToS() {
  GoToS(0)
}

function S1GoToS() {
  GoToS(1)
}

function S2GoToS() {
  GoToS(2)
}

function S3GoToS() {
  GoToS(3)
}

function S4GoToS() {
  GoToS(4)
}

function S5GoToS() {
  GoToS(5)
}

问题是如何在没有脚本的第三个子脚本的情况下创建它们??? 我想并且我希望有另一种创建方法这些 肯定是的,我相信有,但这只是因为我不知道那样做。请有人可以帮我解决这个案子。任何成就将不胜感激。在此先感谢您占用了您的时间,我为我糟糕的英语表示歉意。

事实上,您可以动态生成这些函数。这个想法是在 "global" 范围内的任何函数的 外部 保留一个 for 循环,这将生成所有这些函数。之后,可以通过菜单操作调用它们。您的内容可能如下所示:

// function "constructors"
function createGoToFunction(sheetIndex) {
  return function() {
    var sheet = SpreadsheetApp.getActive().getSheets()[sheetIndex];
    sheet.activate();
  }
}

function createRenameFunction(sheetIndex) {
  return function() {
    // Your rename logic
  }
}

function createMoveFunction(sheetIndex) {
  return function() {
    // Your move logic
  }
}

// functions definition
this['ALL_SHEETS'] = SpreadsheetApp.getActive().getSheets();
for (i=0; i<this['ALL_SHEETS'].length; i++) {
  this['S'+i+'GoToS'] = createGoToFunction(i);
  this['S'+i+'RenameS'] = createRenameFunction(i);
  this['S'+i+'MoveS'] = createMoveFunction(i);
}
delete this['ALL_SHEETS'];
delete this['i'];

function Menu1() {
  var ui = SpreadsheetApp.getUi();
  var sheets = SpreadsheetApp.getActive().getSheets();
  var madeMenu = ui.createMenu('Sheet Tools Just For an Example Menus');

 for (var i=0; i < sheets.length; i++){
   var subMenu = ui.createMenu(sheets[i].getName())
                   .addItem('Go to ...', 'S'+i+'GoToS')
                   .addItem('Rename ...', 'S'+i+'RenameS')
                   .addItem('Move ...', 'S'+i+'MoveS');
   madeMenu.addSubMenu(subMenu);
  }
  madeMenu.addToUi();
}

function onOpen() {
  Menu1();
}

为了实现您自己的函数功能,您只需更改顶部定义的函数体(参见 createGoToFunction 示例)。