google-apps-script - 使用谷歌工作表添加日历事件,但如果事件已经存在,则不想创建
问题描述
我正在谷歌表单中创建一个预订表格,然后创建一个日历邀请来“预订预订”。但是,我想对请求的日期进行验证,以确保在同一时间日历上没有事件。例如,用户输入了 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);
}
}
}
解决方案
考虑
您可以使用以下方法轻松构建基于开始和结束日期的检查:.getEvents(startTime, endTime)
.
检查将包括在用户定义的时间范围内查找事件,如果有,创建将失败。
但是,无法在 Google Form 上将验证检查结果返回给用户。
一种可能的解决方法
您必须实施不同的方式来通知您的用户所选时间范围不可用。
使用触发器
触发器是在 G Suite 中实现流程自动化的最佳方式。假设您的环境是这样构建的:
表格和日历
表单将代表用户界面,日历您的事件数据库。
提交到表单将根据验证函数结果触发事件创建。
要触发此验证,您必须使用.onFormSubmit()
触发器。
现在您的验证功能将产生两种可能的情况:
事件创建失败
如果事件与日历中的现有事件重叠,则无法创建创建。您可以通知您的用户发送一封带有 GAS 的电子邮件,MailApp
说明所选的时间范围不可用。您还可以邀请用户再次填写表单,选择不同的时间范围,将表单的链接附加到电子邮件。
活动创建成功
如果事件不与任何现有事件重叠,即 getEvents(startTime, endTime) 没有返回任何事件,您可以继续使用脚本创建事件。
参考
推荐阅读
- botframework - 不调用 PromptAsync 后的下一步
- asp.net - 模态框不显示 asp.net
- sql - 获取where子句之前的行
- json - Access the child value in JSON Objects react native
- sap-erp - saphostctrl 的 SUM 身份验证问题 – 需要身份验证
- java - java restful servlet的版本控制
- python - Python-使用 docx 模块在 word 文件中从右到左更改
- java - 使用spring boot的任务处理
- php - 如何在 Laravel 5.6 中计算表列类别名称?
- oracle-data-integrator - 计算 linux 目录中的文件并将结果存储在 ODI 变量中