首页 文章

Google应用脚本 - 用于运行自定义功能的自定义菜单

提问于
浏览
0

我已经在这个项目上发布了很多次,我非常感谢我收到的帮助:)

有些东西让我不知所措:我有一张Google表格,其中包含5张单独的表格,一张主表格和4张单独的表格 . 我已经为它编写了一个“发送电子邮件”功能,按预期工作,并且当4个单独的表格中的某个框包含“是”时触发 .

我的问题围绕将此脚本绑定到触发器 . 我收到了之前的建议,即创建一个自定义菜单,在选择时触发脚本 . 我能够添加菜单,将其绑定到一个简单的onOpen()触发器,并让它出现在工作表中,但它不会运行我的脚本:

function onOpen() {
var ui = SpreadsheetApp.getUi();
// Or DocumentApp or FormApp.
ui.createMenu('Send Emails')
  .addSubMenu(ui.createMenu('Send Emails For:')
              .addItem('Miranda Sheet', 'menuItem1')
              .addItem('Piper Sheet', 'menuItem2')
              .addItem('Lowes Sheet', 'menuItem3')
              .addItem('Golden Sheet', 'menuItem4'))
.addToUi();
}
//actions for menu items are below...

该脚本的目的是发送电子邮件,所以我现在知道我将菜单绑定到可安装的onOpen()触发器 . 这是我无法指出的部分 . 如果我更改了函数名称并将onOpen()通过资源>所有触发器绑定到该函数,我的菜单会消失:

function addMenu() {
  var ui = SpreadsheetApp.getUi();
  // Or DocumentApp or FormApp.
  ui.createMenu('Send Emails')
  .addSubMenu(ui.createMenu('Send Emails For:')
    .addItem('Miranda Sheet', 'menuItem1')
    .addItem('Piper Sheet', 'menuItem2')
    .addItem('Lowes Sheet', 'menuItem3')
    .addItem('Golden Sheet', 'menuItem4'))
.addToUi();
}

function menuItem1() {
    var ui = SpreadsheetApp.getUi();
    //Prompt user for confirmation to send emails
    var responseMir = ui.alert('Are you sure you want to send emails?', ui.ButtonSet.YES_NO);
    // Process the user's response.
    if (responseMir === ui.Button.YES) {
      //Test alert  
      //ui.alert('You clicked the first menu item!');
    }
}

所以,我的问题有两个:

  • 我的菜单在哪里?

  • 将函数绑定到触发器后,如何将菜单项绑定到我的脚本?似乎我应该能够在上面的If语句下说“在这里做东西” . 我错了吗?

谢谢你的想法! (我越来越好了,我保证:)

1 回答

  • 2

    为了清楚起见,应该没有从菜单中选择 onOpen() 功能的可安装触发器,因为它已经是一个触发器 .

    一旦编写了函数并且您希望测试选项,您首先需要它来运行 . 你可以这两种方式:

    • 重新加载电子表格(请注意,这将关闭您的脚本标签!)

    • 运行 onOpen() 函数

    请注意,一旦运行了添加菜单的功能,如果更改菜单本身,则只需重新运行它 . 如果您对 menuItem1() 进行了更改,那么您无需重新运行 onOpen() ,因为菜单选择仍将在脚本中运行最新保存的代码 .

    阅读评论我将第二个Zig Mandel,如果你走这条路线并使用菜单启动功能,那么就不需要 onEdit 触发器,因为它们用于完全相同的目的 - 启动数据收集 .

相关问题