Google apps script 创建事件、检索事件ID并分配给列。OneEdit删除事件,然后重新提交

Google apps script 创建事件、检索事件ID并分配给列。OneEdit删除事件,然后重新提交,google-apps-script,google-sheets,google-calendar-api,Google Apps Script,Google Sheets,Google Calendar Api,我正在尝试在日历中创建事件,然后检索事件ID,以便用户可以在以后需要时编辑它。这是创建事件脚本,eventID将保存在第13列: function createEvent(request){ var event = request.calendar.createEvent( "Booked", request.date, request.endTime ); var formRes = FormApp.openById('1

我正在尝试在日历中创建事件,然后检索事件ID,以便用户可以在以后需要时编辑它。这是创建事件脚本,eventID将保存在第13列:

      function createEvent(request){
  var event = request.calendar.createEvent(
    "Booked",
    request.date,
    request.endTime
    );
  var formRes = FormApp.openById('1pULKXVNg9GSUSA_mhVSUHMG7MBP3GvSgHmqrAnyhLvo'); 
  var sheetRes = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Hokusei 41');
  var data = sheetRes.getDataRange().getValues();
  var eventIdCol = 13;
  var responses = formRes.getResponses();
  var timestamps = [], ids = [], resultids = [];
  for (var i = 0; i < responses.length; i++) {
    timestamps.push(responses[i].getTimestamp().setMilliseconds(0));
    ids.push(responses[i].event.getId());
}
  for (var j = 1; j < data.length; j++) {
    resultids.push([data[j][0]?ids[timestamps.indexOf(data[j][0].setMilliseconds(0))]:'']);
    }
    sheetRes.getRange(2, eventIdCol, resultids.length).setValues(resultids);
    }
我还添加了onEdit()函数,在该函数中,它将按ID删除事件,然后再次提交。这是一段代码:

 function updateEvent(e) {
  var editedRow = e.range.getRow();
  var editedData = e.source.getActiveSheet().getRange(editedRow, 12).getValues()[0];
  var eventId = editedData[0];
  var event = CalendarApp.getEventById();
  for (var i=0; i<e.length;i++){
    var ev = e[i];
    ev.deleteEvent();
    break;
  };
}

但是,当有人试图编辑自己的提交时,他/她以前的顺序仍将与自己的提交冲突。非常感谢您的帮助,请提前感谢。

之前的问题是由以下事实造成的:事件ID只能在您最终摆脱@google.com的情况下使用……一种方法是使用以下代码:

  var newEvent = calendar.createEvent("booked", request.date, request.endTime);
  var newEventId = newEvent.getId().split('@')[0];
 var eventEditId = calendar.getEventSeriesById(/*cell in which ID is stored*/);
  eventEditId.deleteEventSeries();
然后使用id删除事件,只需使用以下代码:

  var newEvent = calendar.createEvent("booked", request.date, request.endTime);
  var newEventId = newEvent.getId().split('@')[0];
 var eventEditId = calendar.getEventSeriesById(/*cell in which ID is stored*/);
  eventEditId.deleteEventSeries();

您是否考虑过请求在函数中创建事件作为独立事件,然后从中获取ID?Hi Kessy感谢您的回复。我有一个函数将创建事件,另一个函数将检测时间冲突…我是否应该将它们合并为一个函数?您是否确认
event.getId()
使用console.log获取事件ID?就我所见,responses数组没有id,因为您没有使用创建事件(即“event”变量)的响应。事实上,我发现如果您想使用id,您需要去掉“@google.com”部分。这段代码的工作原理类似于charm.getId().split('@')[0];你这是什么意思?如果解决了,你能发布解决方案,让更多的人从中受益吗?