function onOpen() is not running

前端 未结 5 446
谎友^
谎友^ 2020-12-31 03:10

My function includes adding a menu and toast to the document. I have verified that the trigger (onOpen) is set as well. It only works when a user goes into Tools, Script Man

相关标签:
5条回答
  • 2020-12-31 03:27

    In my case, onOpen wasn't working because I had a variable, outside of a function, opening a sheet with SpreadsheetApp.openById() rather than SpreadsheetApp.getActiveSpreadsheet(). I guess onOpen doesn't work with openById() even if the sheet you are opening is bound to the script. onOpen() won't work with this kind of a variable outside of a function:

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

    If your script is bound to the sheet, you can solve this problem by using the getActiveSpreadsheet() function. Otherwise, you can solve it by putting your openById() call into a function.

    0 讨论(0)
  • 2020-12-31 03:35

    I was having the same issue.

    I realized, sometimes Google create some kind of cache of the scripts (I'm used to have a "test" script and I usually alter it's content, and, sometimes, the script runs as if I didn't).

    So, what I did that solved the onOpen() not working was changing the function name and ading a trigger manually.

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

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

    Choose the function to run on open

    Choose the function to run on open

    It worked like a charm here!

    Updated Location Information: or

    Then

    0 讨论(0)
  • 2020-12-31 03:41

    This is an old post but I just had this problem and find out why it was not working correctly in my case: I had, at the top of my script file a variable that required some authorisations and that prevented the script to correctly run. I saw that OP called var username = Session.getActiveUser().getUsername(); (that requires authorisations, and it's may be the cause).

    eg: this code won't work:

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

    but this one will work:

    function onOpen(){
      SpreadsheetApp.getUi()
      .createMenu("Exportation")
      .addItem("Lancer l'exportation", "exportationMenu")
      .addToUi();
    }
    
    function whatever(){
      var stConsCons= SpreadsheetApp.openById(sgcid).getSheetByName("Consultant");
    ...}
    
    0 讨论(0)
  • 2020-12-31 03:52

    In my case there was a reference error, that while did not stop the script entirely, it did stop the menu from appearing.

    I was only able to detect that error after I run a debug on the script.

    0 讨论(0)
  • 2020-12-31 03:52

    It looks like the problem may be that "sheet" isn't defined, which is why the toast is failing.

    0 讨论(0)
提交回复
热议问题