谷歌Apps脚本 - createEvent功能无法创建日历事件(Google Apps Scri

2019-10-21 07:44发布

我们正努力创造使用谷歌表单把约会请求的在线表格。 这是这个过程应该是什么样子:

  1. 用户填写表单并提交自己的信息(这工作)
  2. 电子邮件被发送到我们的Gmail通知我们新进入的请求的(这工作)
  3. 我们进入谷歌电子表格。 有3片材。 一张所谓的请求 。 另一种叫做接受 。 而另一个名为拒绝 (这些被创造)
  4. 在请求片最后一列具有取舍的值的下拉菜单。 根据我们所选择,将整行移动到适当的纸张 - 接受或拒绝。 (这工作,直到下面的步骤5)
  5. 如果该行被转移到接受,应该创建一个新的日历事件。 这是一个不工作的一部分。 该行被正确地移动到接受片,但不创建新的谷歌日历事件。

奇怪的是,如果我们手动运行的功能,它的工作原理。 它需要的最后一排,并创建一个事件。 如果我们试图通过我们的代码通过直接调用该函数直接运行的功能,它不会创建一个事件。 这是我们对moverow.gs码

(请注意,当日历ID的所有机密,身份信息已被删除这样的):

function onEdit(e) {
  try { moveRow(e) } catch (error) { Browser.msgBox(error) }
}

function moveRow(e) {

  var rowStart = e.range.rowStart;
  var colStart = e.range.columnStart;

  var calendarStaff1Id = "<link to calendar>";
  var calendarStaff2Id = "<link to calendar>"
  var calendarStaff3Id = "<link to calendar>"
  var calendarStaff4Id = "<link to calendar>"

  if ( rowStart == e.range.rowEnd && colStart == e.range.columnEnd ) {
    var active = e.source.getActiveSheet();
    var name = active.getName();

    if ( name == "Requests" && colStart == 10 ) { 
  var value = e.value;

  if ( value == "ACCEPTED (S1)" ) {
    var rowValues = active.getRange( rowStart + ':' + rowStart ).getValues();
    e.source.getSheetByName("Accepted").appendRow(rowValues[0])
    active.deleteRow(rowStart);
    var calendarId = calendarStaff1Id;
    addEvent();

  }

  if ( value == "ACCEPTED (S2)" ) {
    var rowValues = active.getRange( rowStart + ':' + rowStart ).getValues();
    e.source.getSheetByName("Accepted").appendRow(rowValues[0])
    active.deleteRow(rowStart);
    var id = calendarStaff2Id;
    addEvent();

  }

  if ( value == "ACCEPTED (S3)" ) {
    var rowValues = active.getRange( rowStart + ':' + rowStart ).getValues();
    e.source.getSheetByName("Accepted").appendRow(rowValues[0])
    active.deleteRow(rowStart);
    var calendarId = calendarStaff3Id;
    addEvent();

  }

  if ( value == "ACCEPTED (S4)" ) {
    var rowValues = active.getRange( rowStart + ':' + rowStart ).getValues();
    e.source.getSheetByName("Accepted").appendRow(rowValues[0])
    active.deleteRow(rowStart);
    var calendarId = calendarStaff4Id;
    addEvent(calendarId);

  }

  if ( value == "REJECTED" ) {  // Change to the value that will trigger the move
    var rowValues = active.getRange( rowStart + ':' + rowStart ).getValues();  // Entire row
    e.source.getSheetByName("Rejected").appendRow(rowValues[0])  // Change to your "move to" sheet name
    active.deleteRow(rowStart);
    SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Rejected").activate();

    Browser.msgBox("Please contact client to let them know that their request cannot be fulfilled");

      }
    }
  }
}

function addEvent(calendarId) {

    var startDtId = 7;
    var titleId = 2;
    var titleId2 = 6;
    var descId = 8;
    var formTimeStampId = 1;

    SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Accepted").activate();

    // Switch to sheet Accepted and start the calendar event creation
    var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Accepted");
    var rows = sheet.getDataRange();
    var numRows = rows.getNumRows();
    var values = rows.getValues();
    var lr = rows.getLastRow();
    var startDt = sheet.getRange(lr,startDtId,1,1).getValue();
    var subOn = "Added :"+sheet.getRange(lr,formTimeStampId,1,1).getValue()+" by: "+sheet.getRange(lr,titleId,1,1).getValue();
    var desc = "Comments :"+sheet.getRange(lr,8,1,1);
    var title = sheet.getRange(lr,titleId,1,1).getValue()+" - "+sheet.getRange(lr,titleId2,1,1).getValue();
    var start = new Date(startDt);
    var end = new Date(startDt.valueOf()+60*60*1000);
    var loc = 'Central Library';

    var cal = CalendarApp.getCalendarById(calendarId);

    //Browser.msgBox("Please add the following event into your calendar: " + title + " Start Time: " + start + " End Time: " + end);

    var event = cal.createEvent(title, start, end);

};

请帮忙!! 我们在我们束手无策。 提前致谢。

Answer 1:

一个简单的onEdit()触发器不能做任何事情需要授权。 不要紧,谁拥有该文件的脚本中; 如果它是一个简单的触发,那么它是匿名的。

相反,使用一个安装的触发器 。 (你可以简单地重命名功能,然后通过在说明书管理触发器手动设置它。)



文章来源: Google Apps Script - createEvent function not creating calendar event