Javascript 如何使用onEdit触发器修改/更新google日历事件?
所以我一直在用谷歌应用程序脚本在谷歌表单日历表上做实验。我能够从表单提交中自动将事件添加到谷歌日历中。但当用户编辑他们的响应时,我仍然在努力修改事件 因此,新提交的第一个endtime将转换为object,然后检查是否与其他用户提交的另一个提交存在冲突:Javascript 如何使用onEdit触发器修改/更新google日历事件?,javascript,google-apps-script,google-sheets,google-calendar-api,Javascript,Google Apps Script,Google Sheets,Google Calendar Api,所以我一直在用谷歌应用程序脚本在谷歌表单日历表上做实验。我能够从表单提交中自动将事件添加到谷歌日历中。但当用户编辑他们的响应时,我仍然在努力修改事件 因此,新提交的第一个endtime将转换为object,然后检查是否与其他用户提交的另一个提交存在冲突: function getEndTime(request){ request.endTime = new Date(request.dateout.getTime() + 24 * 60 * 60 * 1000); } function
function getEndTime(request){
request.endTime = new Date(request.dateout.getTime() + 24 * 60 * 60 * 1000);
}
function getConflicts(request){
var conflicts = request.calendar.getEvents(request.date, request.endTime);
if (conflicts.length > 0) {
request.status = "Conflict";
} else {
request.status = "Approve";
}
}
如果没有冲突,日历将被更新
function updateCalendar(request){
var event = request.calendar.createEvent(
"Booked",
request.date,
request.endTime
)
}
这是onFormSubmit函数(带有表单提交触发器):
这是onEdit函数(带有onEdit触发器)以及change()函数:
function Change() {
this.statusArray = sheet.getRange(1, lastColumn, lastRow, 1).getValues();
this.statusArray = [].concat.apply([], this.statusArray);
this.index = this.statusArray.indexOf('');
if (this.index == -1) return;
this.dateArray = sheet.getRange(1, lastColumn - 4, lastRow, 1).getValues();
this.dateArray = [].concat.apply([], this.dateArray);
this.dateoutArray = sheet.getRange(1, lastColumn - 3, lastRow, 1).getValues();
this.dateoutArray = [].concat.apply([], this.dateoutArray);
}
function onEdit() {
var change = new Change();
while (change.index != -1) {
change.status = change.statusArray[change.index];
change.row = change.index + 1;
var request = new Request(change.row);
if (change.status == 'Sent: Conflict') {
change.statusArray[change.index] = 'Conflict';
request.status = 'Conflict';
sendEmail(request);
sheet.getRange(change.row, lastColumn).setValue('Sent: Conflict');
} else {
getEndTime(request);
change.statusArray[change.index] = 'Approve';
updateCalendar(request);
sendEmail(request);
sheet.getRange(request.row, lastColumn).setValue('Sent: Approve');
break;
}
}
change.index = change.statusArray.indexOf('');
}
即使使用这组代码,编辑提交也将始终与上一次提交冲突。(例如,如果我在5月17日至5月19日首次提交该书,然后在5月17日至5月21日编辑该书,则我编辑的提交将与之前自己提交的内容冲突)。如何删除以前的事件,然后在编辑时用新的提交内容替换它?提前谢谢你 应使用或方法更改现有事件
如果要完全删除,则应使用此方法。谢谢!非常感谢!我会试试的
function Change() {
this.statusArray = sheet.getRange(1, lastColumn, lastRow, 1).getValues();
this.statusArray = [].concat.apply([], this.statusArray);
this.index = this.statusArray.indexOf('');
if (this.index == -1) return;
this.dateArray = sheet.getRange(1, lastColumn - 4, lastRow, 1).getValues();
this.dateArray = [].concat.apply([], this.dateArray);
this.dateoutArray = sheet.getRange(1, lastColumn - 3, lastRow, 1).getValues();
this.dateoutArray = [].concat.apply([], this.dateoutArray);
}
function onEdit() {
var change = new Change();
while (change.index != -1) {
change.status = change.statusArray[change.index];
change.row = change.index + 1;
var request = new Request(change.row);
if (change.status == 'Sent: Conflict') {
change.statusArray[change.index] = 'Conflict';
request.status = 'Conflict';
sendEmail(request);
sheet.getRange(change.row, lastColumn).setValue('Sent: Conflict');
} else {
getEndTime(request);
change.statusArray[change.index] = 'Approve';
updateCalendar(request);
sendEmail(request);
sheet.getRange(request.row, lastColumn).setValue('Sent: Approve');
break;
}
}
change.index = change.statusArray.indexOf('');
}