Google apps script 创建事件、检索事件ID并分配给列。OneEdit删除事件,然后重新提交
我正在尝试在日历中创建事件,然后检索事件ID,以便用户可以在以后需要时编辑它。这是创建事件脚本,eventID将保存在第13列: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
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];你这是什么意思?如果解决了,你能发布解决方案,让更多的人从中受益吗?