Mun*_*key 6 javascript google-sheets google-apps-script
我是Javascript和谷歌应用程序的新手,但慢慢找到我的脚(帮助)
我编写了一个脚本来执行各种操作,这个脚本的一部分是安装触发器.这里是.
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()手动运行时.触发器已安装.
我目前拥有电子表格,但理想情况下,我想与人分享,触发器安装和工作.
有任何想法吗?
发表评论后:
将函数的名称更改为其他任何内容并创建一个可安装的触发器,在SS打开时运行此函数,如文档中所述,简单触发器不能执行任何需要授权但可安装的操作.


编辑:使用您的代码完成示例
在电子表格中保存并使用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);   
  }
}


编辑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');
    }
| 归档时间: | 
 | 
| 查看次数: | 6560 次 | 
| 最近记录: |