如何使用循环子菜单的 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
示例)。
嗨,大家 .. 我有一个关于 在 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
示例)。