google-apps-script - 执行失败 : You do not have permission to call getProjectTriggers

标签 google-apps-script google-sheets triggers

我写了一个脚本来做各种事情,这个脚本的一部分是安装触发器:

function setTrigger() { 
var ss = SpreadsheetApp.getActive();
var triggers = ScriptApp.getProjectTriggers();
Logger.log('Amount of triggers ' +triggers.length);


var j = 0;
for (var i = 0 ; i < triggers.length;i++){

if(triggers[i].getHandlerFunction() == 'getNotes' ){j++;}

}

Logger.log('Amount of matching triggers ' +j);

if(j == 0 ){ScriptApp.newTrigger("getNotes").forSpreadsheet(ss).onFormSubmit().create();} 
}

这是我遇到的问题。

以上代码在onOpen() 触发器中调用。 当我打开工作表并检查日志时,我的触发器未安装,我收到以下消息。

Execution failed: You do not have permission to call getProjectTriggers

当我手动运行 onOpen() 时。触发器已安装。

我目前拥有该电子表格,但理想情况下,我想与其他人分享它并且触发器安装和工作。

关于如何通过在 onOpen 中调用项目触发器来解决此错误的任何想法?

最佳答案

根据您的评论:

将您的函数名称更改为任何其他名称,并创建一个可安装的触发器,在 SS 打开时运行此函数,如 the doc 中所述,简单的触发器不能做任何需要授权的事情,但可安装的触发器可以。

enter image description here

enter image description here


编辑:使用您的代码完成示例

将其保存在电子表格中并使用 specialonOpen 函数手动设置打开时的触发器(并接受授权请求)后,我刷新了浏览器并使其与您的菜单和新触发器一起使用(见下图 -在法语中,因为我使用了另一个带有旧电子表格版本的 gmail 帐户,我的英语帐户有新版本并且 onFormSubmit 在新版本中不起作用)

function specialonOpen() {
  var ss = SpreadsheetApp.getActive();

  var items = [
    {name: 'Refresh TOL Notes', functionName: 'getNotes'},
    null, // Results in a line separator.
    {name: 'Coming Soon!', functionName: 'menuItem2'}
  ];
  ss.addMenu('TOL Toolkit', items);  
  var sheet = ss.getSheetByName('New Notes');
  if (sheet == null) {var ss = SpreadsheetApp.getActive();
                      ss.insertSheet('New Notes',0 );

                      var sheet = ss.getSheetByName('New Notes');
                      sheet.deleteColumns(3, 18);
                      sheet.deleteRows(12, 88 );
                      sheet.getRange('a1').setValue('Agent Name');
                      sheet.getRange('b1').setValue('Tol Notes');
                      getNotes();

                      sheet.setColumnWidth(1, 120);
                      sheet.setColumnWidth(2, 400);
                      setTrigger()              }


  getNotes();        
  setTrigger()
}


function setTrigger() {
  var ss = SpreadsheetApp.getActive();
  var triggers = ScriptApp.getProjectTriggers();
  Logger.log('Amount of triggers ' + triggers.length);
  var j = 0;
  for (var i = 0; i < triggers.length; i++) {
    if (triggers[i].getHandlerFunction() == 'getNotes') {
      j++;
    } 
  }
    Logger.log('Amount of matching triggers ' + j);
  if (j == 0) {
    ScriptApp.newTrigger("getNotes").forSpreadsheet(ss).onFormSubmit().create();
  }
}


function getNotes() {
  var s = SpreadsheetApp.getActive();
  var sheet1 = s.getSheetByName('New Notes');
  if (sheet1 == null) {
    var s = SpreadsheetApp.getActive();
    s.insertSheet('New Notes', 0);
    var sheet1 = s.getSheetByName('New Notes');
    sheet1.deleteColumns(3, 18);
    sheet1.deleteRows(12, 88);
    sheet1.getRange('a1').setValue('Agent Name');
    sheet1.getRange('b1').setValue('Tol Notes');    
    sheet1.setColumnWidth(1, 120);
    sheet1.setColumnWidth(2, 400);   
  }
}

enter image description here

enter image description here


编辑 2:带有浏览器消息的解决方案,建议从菜单安装。

function onOpen() {
  var ss = SpreadsheetApp.getActive();

  var items = [
    {name: 'Install this script', functionName: 'setTriggers'},
  ];
    ss.addMenu('Custom Menu', items);  
    Browser.msgBox('please run INSTALL from the custom menu');
    }

关于google-apps-script - 执行失败 : You do not have permission to call getProjectTriggers,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21219031/

相关文章:

java - 与在 Eclipse 中使用常规 Java 代码相比,使用 Google Apps 脚本与 Google 表格交互有哪些优势?

google-apps-script - 创建新文件夹并复制谷歌表格,使用新名称到新文件夹

google-apps-script - 将多种字体颜色应用于单个 Google 表格单元格中的文本

javascript - 如何在 Google 应用程序脚本中将数组显示到 HTML 侧边栏

azure - 在每月的第三个工作日触发 Azure 逻辑应用

javascript - GSheet 脚本要求

javascript - Google Apps 脚本中的原子可撤消功能

javascript - 谷歌脚本 : Play Sound when a specific cell change the Value

MySQL insert trigger 只针对新行

mysql - 无法更新触发器中的其他表