首页 > 解决方案 > 使用谷歌工作表添加日历事件,但如果事件已经存在,则不想创建

问题描述

我正在谷歌表单中创建一个预订表格,然后创建一个日历邀请来“预订预订”。但是,我想对请求的日期进行验证,以确保在同一时间日历上没有事件。例如,用户输入了 7 月 20 日的检查日期和 7 月 27 日的检查日期,但在日历上,已经有 7 月 23-25 日的事件。如何创建此验证并在 google 表单中向用户返回验证并让他们选择不同的日期。我已经复制了我拥有的代码(当前有效)以从谷歌表单创建日历邀请。

   function fncName()
  var Cal = calendar.app.getcalenderbyID('beachcondoo@gmail.com')
  var events = cal.getEvents(starttime, endtime)
 

function createCalendarEvent() {
  var sheet = SpreadsheetApp.getActiveSheet();
  var calendar = CalendarApp.getCalendarById('oibeachcondo@gmail.com');
 
  var startRow = 2;  // First row of data to process - 2 exempts my header row
  var numRows = sheet.getLastRow();   // Number of rows to process
  var numColumns = sheet.getLastColumn();
 
  var dataRange = sheet.getRange(startRow, 1, numRows-1, numColumns);
  var data = dataRange.getValues();
 
  var complete = "Done";
 
  for (var i = 0; i < data.length; ++i) {
    var row = data[i];
    var email = row[1]; //Email Address
    var name = row[2];  //Name
    var phone = row[3]; //Phone Number
    var guests = row[4];  //# of Guests
    var payment = row[7];  //Payment Preference
    var checkin = new Date(row[8]);  //Checkin Date
    var checkout = new Date(row[9]); //Checkout Date
    var eventID = row[10]; //event marked Done
   
    if (eventID != complete) {
      var currentCell = sheet.getRange(startRow + i, numColumns);
      calendar.createEvent('\Ocean Isle Beach Condo Reserved', checkin, checkout, {
        description: payment + '\r-' + name + '\r-' + phone + '\r-' + email + '\r-' + guests +'\guests'
      });
    
      currentCell.setValue(complete);
    }
  }
}

标签: google-apps-script

解决方案


考虑

您可以使用以下方法轻松构建基于开始和结束日期的检查:.getEvents(startTime, endTime).

检查将包括在用户定义的时间范围内查找事件,如果有,创建将失败。

但是,无法在 Google Form 上将验证检查结果返回给用户。

一种可能的解决方法

您必须实施不同的方式来通知您的用户所选时间范围不可用。

使用触发器

触发器是在 G Suite 中实现流程自动化的最佳方式。假设您的环境是这样构建的:

表格和日历

表单将代表用户界面,日历您的事件数据库。

提交到表单将根据验证函数结果触发事件创建。

要触发此验证,您必须使用.onFormSubmit()触发器。

现在您的验证功能将产生两种可能的情况:

事件创建失败

如果事件与日历中的现有事件重叠,则无法创建创建。您可以通知您的用户发送一封带有 GAS 的电子邮件,MailApp说明所选的时间范围不可用。您还可以邀请用户再次填写表单,选择不同的时间范围,将表单的链接附加到电子邮件。

活动创建成功

如果事件不与任何现有事件重叠,即 getEvents(startTime, endTime) 没有返回任何事件,您可以继续使用脚本创建事件。

参考

日历应用

Gmail 应用程序

Apps 脚本触发器


推荐阅读