google script openById : You do not have permission to perform that action

An event driven script in a spreadsheet opens another spreadsheet

var ss = SpreadsheetApp.openById(otherSpreadsheetId); 

Looking at the execution transcript, I get the following error

SpreadsheetApp.openById([0AjqSnE_p3nFqdDN0LWpFbjFqVDRwNmFGOV91QzZrZc]) [0 seconds] Execution failed: You do not have permission to perform that action.

When I run the function directly in the debugger, I successfully open the other spreadsheet. When the function is run by an "onEdit" event, then I get the error.

Do I need to enable a particular API?


Solution 1:

Installable Triggers

There are two types of OnEdit trigger. Installable triggers are able to 'alter another file', see: https://developers.google.com/apps-script/guides/triggers/installable

@kusi supplied the answer as a comment, just adding it here.

Solution 2:

You can set up an installable trigger programmatically in the current sheet and this way the openById can be called.

function onOpen() {
  ScriptApp.newTrigger('myOnEdit')
   .onEdit()
   .create();
}

function myOnEdit(e){
   SpreadsheetApp.openById('id_of_other_sheet');
}