在菜单UI脚本初学者中使用循环

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在菜单UI脚本初学者中使用循环相关的知识,希望对你有一定的参考价值。

我正在尝试创建一个动态菜单,在其中创建工作表的名称。我不经常编码,需要一些帮助。目前代码ON_Open创建一个菜单,在菜单中创建它的第一个项目,然后添加一个分隔符,然后进入循环。它检查有多少张纸并从第一张开始。存储名称并生成具有该名称的菜单项,然后前进到下一个工作表。获取其名称并生成下一个菜单项。我可以让循环使用菜单UI语法。我不担心名称。我将尝试解决下一步,只是希望它首先创建菜单

function onOpen() {

  var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  var numsheets = spreadsheet.getNumSheets();

  SpreadsheetApp.getUi
      .createMenu('SWMS CREATER')
      .addItem('Create New SWMS', 'showPrompt')
      .addSeparator()

 for ( var i = 0; i < numsheets.length;i++ ) {
    var ui = SpreadsheetApp.getUi();
    var subMenu = ui.createMenu('Test Menu');
    subMenu.addItem('Test script'i ,'showPrompt');
    } 

}
答案

OP正在尝试创建一个动态菜单,列出电子表格中的每个工作表。 OP的代码非常接近工作 - 只有很小但很重要的调整数量。

function onOpen() {

  var ui = SpreadsheetApp.getUi();
  var menu = ui.createMenu('OPSWMS CREATER')
    .addItem('Create New SWMS', 'showPrompt')
    .addSeparator();

  var sheetList = SpreadsheetApp.getActiveSpreadsheet().getSheets();
  var subMenu = ui.createMenu('OPTest Menu');

  for (var i = 0; i < sheetList.length; i++) {
    subMenu.addItem(sheetList[i].getName(), 'showPrompt');
  }
  menu.addSubMenu(subMenu).addToUi();
}

主要差异摘要:

1)变量ui移出循环;然后在可能的情况下重新使用。 2)变量menu建立并且也移出了循环。这被重新用于在最后一行代码中添加subMenu。 3)在.addSeparator()之后添加了一个分号(虽然可选) 4)使用.getSheets()获取所有床单。这是OP代码中缺少的第一个关键元素。 5)放下var numsheets线。你不需要这个,因为你可以在sheetList上获得相同的数量。 6)在循环内,有两点需要注意

  • sheetList[i]方括号中的i([i])返回“sheetList”中的相关项;
  • .getName()返回工作表的名称。组合起来,sheetList[i].getName()为您提供工作表的名称,并允许您将其添加为菜单项选择。

7)menu.addSubMenu(subMenu).addToUi();这将循环的内容添加到菜单中。这是OP代码中缺少的第二个关键元素。

信用: Aqtim Jalilov对Quetsswep的回答

以上是关于在菜单UI脚本初学者中使用循环的主要内容,如果未能解决你的问题,请参考以下文章

带有片段的两个面板 UI 与单独的活动

如何将片段目标绑定到底部导航栏中的菜单项?

如何将数据从活动传输到片段? [复制]

Shell 脚本中基于菜单的选择

使用从循环内的代码片段中提取的函数避免代码冗余/计算开销

使用导航从工具栏菜单项单击在片段之间传递数据 - Kotlin