【问题标题】:Google App Script Error: You do not have permission to call getActiveForm?Google App 脚本错误:您无权调用 getActiveForm?
【发布时间】:2014-09-07 17:18:00
【问题描述】:

我正在创建一个脚本,该脚本从表单中获取信息并将其写入日历。当我在脚本编辑器中运行脚本时,它运行良好,从电子表格中获取信息并创建一个日历事件。但是,当我填写表格并提交(提交是触发器)时,我收到一条错误消息,指出我无权调用 getActiveForm()。我拥有表格和日历。我很欣赏任何想法。

代码

function createEvent() {
  var calendarToUse = "testing";
  var ssUrlToUse ='https://docs.google.com/a/bay.k12.fl.us/spreadsheets
/d/1ZTDQL9G5U7RqbbKQbAfb3ERqFwpSsC3EOQxdD1zdQwA/edit#gid=441997215';

  /* Get Canalnder*/
  var calen = CalendarApp.getCalendarsByName(calendarToUse);
  var cal = calen[0];
  Logger.log(cal.getName());

  /* get info from responses*/

var mySS
=SpreadsheetApp.openByUrl(ssUrlToUse).getActiveSheet()
  Logger.log(mySS.getName());
  var values = mySS.getDataRange().getValues();
  var response = values[values.length-1];
  var i=2;
  var desc = response[i]; 
  var loc = response[i+1];
  var start = makeGreatDate( response[i+2], response[i+4]);
  var end = makeGreatDate(response[i+3],response[i+6]);
  var title =  response[i+5];

  /* populate calendar event*/ 
  var event = cal.createEvent(title, start, end, {
      description : desc,
      location : loc
      });


};

function makeGreatDate(date, time) {
   var day = new Date(date);
  day.setHours(time.getHours());
  day.setMinutes(time.getMinutes());
  Logger.log( "The Date is"+ day);
  return day;
}

【问题讨论】:

  • 您的代码示例不包含对getActiveForm() 的调用,请更新。

标签: google-apps-script permissions google-forms


【解决方案1】:

我遇到了同样的问题。我的脚本只是将表单响应和格式转换为电子邮件。与 OP 类似,我不会在脚本中的任何位置对 FormApp.getActiveForm() 进行一次调用。

这个权限问题是在我添加了PropertiesService.getScriptProperties() 调用后立即开始的。

虽然不是一个完整的解决方案,但我可以通过为 FormApp.getActiveForm() 添加一行来解决此问题,保存,然后保存我的触发器(再次检查权限)。我被要求确认脚本的Offline Access 权限。

然后我删除了不需要的行,表单工作正常。

【讨论】:

  • 感谢您的提示!不知何故,我的脚本失去了这个特定的权限,但添加了 FormApp.getActiveForm() 调用,运行它以获取权限提示,然后将其删除解决了我的问题!
【解决方案2】:

从 UI 中删除触发器并重新添加它会提示它请求新权限“离线访问”。我同意了,从那时起它就起作用了。

【讨论】:

    【解决方案3】:

    如果您在添加触发器后更改了代码,那么您需要删除触发器并重新添加它,这样就可以了

    【讨论】:

    • 您似乎在写完之前已经发布了答案。可以请edit 完成它吗?
    【解决方案4】:

    这很奇怪,但是您的脚本必须具有 Google Drive 的权限。在脚本中插入一些代码,以便应用程序会请求它的权限(例如):

    var d = DriveApp.getRootFolder();
    

    然后运行脚本,授予权限。之后,您可以删除插入的行,除非您将代码从一个表单复制到另一个表单。

    【讨论】:

      【解决方案5】:

      我在附加到电子表格的脚本上遇到了同样的问题,但在提交为该电子表格提供数据的表单时做了一些事情。我在 Resources->All Triggers 下发现我有一个带有列为“来自表单”的事件的残留通知。由于脚本在具有“来自表单”事件通知的电子表格中运行导致错误。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多