函数onOpen()未运行

时间:2012-11-12 02:20:51

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

我的功能包括为文档添加菜单和烤面包。我已经验证了触发器(onOpen)也已设置好。它仅在用户进入“工具”,“脚本管理器”,“运行”时才有效。我们有太多的用户,背景太多,以至于不知道如何做到这一点。为什么不工作? (使用Chrome)

function onOpen()
{
  var menus = [{name: "Advance in Workflow", functionName:"sendEmail"}];

     SpreadsheetApp.getActiveSpreadsheet().addMenu("Auto Advance FG Workflow", menus);

  //sheet.toast(Notify/Remind users);
   sheet.toast("While you are here we kindly ask that you do not add, modify or remove     any columns.","Welcome - " + username,8);
 }

谢谢,

5 个答案:

答案 0 :(得分:30)

我遇到了同样的问题。

我意识到,有时Google会创建某种脚本缓存(我习惯使用“测试”脚本,而且我通常会改变它的内容,有时,脚本会像我没有那样运行)。

所以,我所做的解决了onOpen()无效的问题是改变了函数名称并手动调整了触发器。

  

Go to "Resources -> Current script's triggers…"

     

转到“资源 - >当前脚本的触发器......”

     

Choose the function to run on open

     

选择要在打开时运行的功能

这就像一个魅力!

更新的位置信息: from tool bar 要么 from menu bar

然后

trigger select

答案 1 :(得分:9)

这是一篇旧帖子,但我刚遇到这个问题,并找出为什么它在我的情况下无法正常工作: 我在脚本文件的顶部有一个变量,它需要一些授权并阻止脚本正确运行。我看到OP称为var username = Session.getActiveUser().getUsername();(需要授权,可能是原因)。

例如: 这段代码不起作用:

function onOpen(){
  SpreadsheetApp.getUi()
  .createMenu("Exportation")
  .addItem("Lancer l'exportation", "exportationMenu")
  .addToUi();
}
var stConsCons= SpreadsheetApp.openById(sgcid).getSheetByName("Consultant");

但是这个会起作用:

function onOpen(){
  SpreadsheetApp.getUi()
  .createMenu("Exportation")
  .addItem("Lancer l'exportation", "exportationMenu")
  .addToUi();
}

function whatever(){
  var stConsCons= SpreadsheetApp.openById(sgcid).getSheetByName("Consultant");
...}

答案 2 :(得分:2)

在我的情况下,有一个引用错误,虽然没有完全停止脚本,但它确实停止了菜单的出现。

我在脚本上运行调试后才能检测到该错误。

Google script debug option

答案 3 :(得分:0)

看起来问题可能是“工作表”未定义,这就是吐司失败的原因。

答案 4 :(得分:0)

在我的情况下,onOpen无法正常工作,因为我在函数外部有一个变量,它使用SpreadsheetApp.openById()而不是SpreadsheetApp.getActiveSpreadsheet()打开工作表。我猜onOpen无法与openById()一起使用,即使您要打开的工作表已绑定到脚本。 onOpen()不能在函数外部使用此类变量:

var sheet = SpreadsheetApp.openById("1b_PQD...").getSheetByName("demos")

如果脚本绑定到工作表,则可以使用getActiveSpreadsheet()函数解决此问题。否则,您可以通过将openById()调用放入函数中来解决此问题。