Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何使用onEdit触发器修改/更新google日历事件?_Javascript_Google Apps Script_Google Sheets_Google Calendar Api - Fatal编程技术网

Javascript 如何使用onEdit触发器修改/更新google日历事件?

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

所以我一直在用谷歌应用程序脚本在谷歌表单日历表上做实验。我能够从表单提交中自动将事件添加到谷歌日历中。但当用户编辑他们的响应时,我仍然在努力修改事件

因此,新提交的第一个endtime将转换为object,然后检查是否与其他用户提交的另一个提交存在冲突:

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('');
  }