如何让触发器在复制的电子表格+脚本中工作?

时间:2016-07-25 22:26:34

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

我目前正在创建一个电子表格,用户可以在其中输入商品编号,工作表将在接下来的两列中返回说明和价格。

电子表格从另一个工作表(而不是另一个页面,而不是整个不同的URL)中提取项目信息,并且每次输入项目编号时工作表都会自动更新(没有vlookup,因为信息位于另一个URL上)。

最有可能的是,多个人同时需要此表格,他们还需要一份参考记录副本。他们都可以访问我所拥有的“主文件”,我希望他们可以简单地复制然后填写表格。

但是,虽然我的脚本中的代码在主文件上工作得很好,但当他们复制时,程序将无法运行。我知道它与未被复制的触发器有关,我已经阅读了在脚本中编写触发器,但这就是问题所在。

用户无法看到脚本 - 也就是说,我们不希望他们看到任何代码。因此他们无法进入,通过“资源”打开触发器或单击脚本编辑器中的运行/调试。

所以基本上我需要用户能够打开共享的,仅查看文件,制作电子表格的副本(从另一张表中获取信息并具有触发器),并使用该电子表格购买输入项目编号。这些人中的大多数人不应该看到内部运作,也不会理解任何内容。

我在想一个可能的解决方案就像他们在25:56或37:355左右在this video所做的那样,他们可以按下按钮然后编写触发器。他们不会过去怎么做。

2 个答案:

答案 0 :(得分:1)

根据我的理解,你不需要这里的脚本,电子表格公式就可以了 要将数据从一个电子表格导入另一个电子表格,您可以使用公式“importData”并将这些数据放入hiden表中。 然后你可以在这个导入上使用“vlookup”公式甚至更好的“过滤器”公式(尝试你喜欢它的过滤器公式)。

答案 1 :(得分:1)

如果您的用户都在私有域中,那么最佳解决方案是publish a private add-on(即仅适用于域用户)。如果您使用的是消费者帐户,那么这不是一种选择。

或者,您可以使用菜单驱动的功能以编程方式创建所需的触发器。这在您的情况下很有效,因为:

  • “原始”电子表格以只读方式共享,用户需要制作个人副本才能输入自己的数据。
  • 用户将成为其副本的所有者,因此包含的脚本将按原样运行。

例如,您可以尝试this shared spreadsheet。它是共享公共的,只读,但如果您保存副本,您将看到一个自定义菜单,用于设置触发器功能,并更新电子表格中的第一个单元格。迟到十秒,触发功能再次更新它。

演示脚本包含在电子表格中,因此您可以在那里自己查看。以下是它的全部内容:

// Create a menu that will initialize the trigger
function onOpen() {
  var ui = SpreadsheetApp.getUi();
  ui.createMenu('Custom Menu')
      .addItem('Initialize spreadsheet', 'setTrigger')
      .addToUi();
}

function setTrigger() {
  // clear any existing triggers
  var triggers = ScriptApp.getUserTriggers(SpreadsheetApp.getActive())
  for (var i=0; i<triggers.length; i++) {
    ScriptApp.deleteTrigger(triggers[i]);
  }

  // set new trigger
  ScriptApp.newTrigger("runTrigger")
           .timeBased()
           .after(10*1000)    // 10s delay
           .create();
  announce("Trigger set. Wait for it...");
}

function runTrigger() {
  announce("Trigger fired! This completes our demo.");
}

// Update first cell in spreadsheet
function announce(message) {
  var range = SpreadsheetApp.getActive().getSheets()[0].getRange("A1");
  range.setValue(message);
}

您可以包含“按钮”图像,而不是菜单,并将脚本链接到该图像。我没有看视频,但这可能就是他们所做的。您可以在How do you add UI inside cells in a google spreadsheet using app script?

中查看有关该(愚蠢,imho)选项的更多信息