google-apps-script - 使用 AppScript 连接 Google 日历和 Google 表格时出现重复事件的问题
问题描述
我成功地将 GCalendar 集成到 Gsheet 以创建事件。提交 Google 表单后,应用脚本会向我的日历和访客日历发送邀请。
我在自动化和重复条目方面遇到问题。当出现新行时脚本不会运行 - 在编辑和表单提交时都尝试过 - 当我强制它运行时,它会重新安排所有过去的事件。
这是我的代码
function CreateEvent() {
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('functionSheet');
var eventCal = CalendarApp.getCalendarById('name@email.com');
var lr = spreadsheet.getLastRow();
var count = spreadsheet.getRange("A2:N"+lr+"").getValues();
for (x=0; x<count.length; x++) {
var shift = count[x];
var summary = shift[2];
var startTime = shift[7];
var endTime = shift[8];
var guests = shift[1];
var description = shift[3];
var location = shift[5];
var event = {
'location': location,
'description': description,
'guests':guests +',',
'sendInvites': 'True',
}
eventCal.createEvent(summary, startTime, endTime, event)
}
}
我正在寻找一种解决方案来改进我的脚本,以便它在每次完成新提交时运行,并且不要根据旧条目(前几行)发送邀请。
解决方案
您正在根据来自 Google 表单的表单响应创建日历事件。当您的代码运行时,它会为所有响应创建事件,而不仅限于最近的响应。
解决此问题的措施有两个:
- 通过使用可安装的触发器`onFormSubmit 来触发函数。
- 使用事件对象来捕获表单响应值,并根据这些值更新日历。
注意:您的函数现在称为CreateEvent(e)
. 该e
属性将自动让您访问事件对象。
以下代码未经测试,但它指示了要采取的方法。
`
function CreateEvent(e) {
var ss = SpreadsheetApp.getActiveSpreadsheet();
// Logger.log(JSON.stringify(e)); // DEBUG
// identify Calendar
var eventCal = CalendarApp.getCalendarById('<insert id >');
// get the response data
var summary = e.values[2];
var startTime = e.values[7];
var endTime = e.values[8];
var guests = e.values[1];
var description = e.values[3];
var location = e.values[5];
var event = {
'location': location,
'description': description,
'guests':guests +',',
'sendInvites': 'True',
}
// create the event.
eventCal.createEvent(summary, startTime, endTime, event)
}
onForm提交
使用可安装的触发器触发函数很重要onFormSubmit
。请参阅手动管理触发器的文档以获取按步骤设置的“操作方法”说明。
完成设置后,您的屏幕应如下所示。
请注意,函数名称 ( CreateEvent
) 并不表示您正在使用事件对象 - 这没关系 - 触发器只是获取基本名称。但是,实际调用您的函数CreateEvent(e)
以便它可以访问事件对象非常重要。
推荐阅读
- python - 如何在 Python 中使用 Pandas 库摆脱系列标题(列标题)
- r - 从数据帧进行频率分布
- excel - 使用小计函数保留值的问题
- python - 如何在 google colab notebook 上运行 AnimeGANv2 的 PyTorch 实现?
- cmake - Why does find_package(MPI) generate a warning message?
- vue.js - 为什么 beforeRouteEnter 的 next 回调函数中的代码在挂载钩子之前被调用
- salesforce - 测试类覆盖率在 71% 后没有增加。“粗体斜体部分不在测试类中。”
- asp.net-mvc - 在 ASP.NET MVC 的控制器中打开新选项卡中的链接
- camera - Kinect v2 作为带有外部红外光源的红外摄像机将无法工作
- python - “分页文件太小,无法完成此操作”尝试训练 YOLOv5 对象检测模型时出错