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

时间:2017-01-23 22:44:22

标签: javascript function google-apps-script google-sheets

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

有些东西在逃避我:我有一张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!');
    }
}

所以,我的问题有两个:

  1. 我的菜单在哪里?

  2. 将该功能绑定到触发器后,如何将菜单项绑定到我的脚本?好像我应该能说'#34;在这里做点什么"在上面的If语句下。我错了吗?

  3. 感谢您的想法! (我保证会变得更好)。

1 个答案:

答案 0 :(得分:2)

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

编写完该函数并希望测试选项后,首先需要运行它。您可以通过以下两种方式完成此任务:

  1. 重新加载电子表格(请注意,这将关闭您的脚本标签!)
  2. 运行onOpen()功能
  3. 请注意,一旦运行了添加菜单的功能,只需更改菜单本身就需要重新运行。如果您对menuItem1()进行了更改,那么您不需要重新运行onOpen(),因为菜单选择仍然会在脚本中运行最新保存的代码。

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