我能够使用下面的代码成功创建一个日历事件,但无法弄清楚为什么它在已经存在的情况下创建另一个日历事件。我已经查看了各种帖子,似乎无法编写代码来不创建另一个日历事件。 我感觉这很简单,但我花了几个小时查看各种帖子和视频,但无法让它发挥作用。
任何删除重复日历条目的指导将不胜感激。以下是用于创建日历事件的数据示例。
function CreateCalendarEvent() {
const ID = '1MkimspZROYFPFApQECWHETIwMkWfQ5aizj0Da17cVhs';
const sheet = SpreadsheetApp.openById(ID).getSheetByName('Database');
var index = 2; // This indicates start looking at row 2
var LastRow = sheet.getLastRow();
for (;index<=LastRow; index++){
var taskTitle = sheet.getRange(index,2,1,1).getValue();
var taskDesc = "Check On Me"//sheet.getRange(index,3,1,1).getValue();
var startDate = sheet.getRange(index,1,1,1).getValue();
var endDate = sheet.getRange(index,1,1,1).getValue();
var checkOnMe = sheet.getRange(index,7,1,1).getValue();
if (checkOnMe == "Yes" && taskTitle && startDate && endDate)
{
var events = CalendarApp.getCalendarsByName("User_Form")[0].getEvents(startDate,
endDate);
delete_events(events);
var Calendar = CalendarApp.getCalendarsByName("User_Form")
[0].createEvent(taskTitle,startDate,endDate,{description: taskDesc});
}
}// End of Loop
}// End of Create Calendar
function delete_events(events){
for(var i=0; i<events.length;i++){
ev.deleteEvent();
}
}
您有一个接受事件数据的 Google 表单。该表单链接到一个电子表格,其中包含一个脚本,该脚本可以使用新的事件数据更新 Google 日历。该脚本由可安装的
onFormSubmit
触发器触发。但脚本总是创建重复的事件。
原因
for (;index<=LastRow; index++){
每次脚本运行时,它都会处理电子表格中的每个项目。因此会出现重复的事件。
解决方案
变化
CreateCalendarEvent(e)
- 这将确保事件对象可用于脚本。Logger.log(JSON.stringify(e))
- 仅用于调试;这将在每次运行脚本时显示每个事件对象的值index
=最新提交的行taskTitle
、taskDesc
、startDate
、endDate
、checkOnMe
:值引用由 index
指示的行号。另一种方法是使用 sheet.getDataRange().getValues
,然后通过数组值引用变量(使用 index
)。function CreateCalendarEvent(e) {
Logger.log(JSON.stringify(e)) // DEBUG
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Database')
// get Event Objects
var index = e.range.rowStart
var taskTitle = sheet.getRange(index,2,1,1).getValue();
var taskDesc = "Check On Me"//sheet.getRange(index,3,1,1).getValue();
var startDate = sheet.getRange(index,1,1,1).getValue();
var endDate = sheet.getRange(index,1,1,1).getValue();
var checkOnMe = sheet.getRange(index,7,1,1).getValue();
if (checkOnMe == "Yes" && taskTitle && startDate && endDate)
{
var events = CalendarApp.getCalendarsByName("User_Form")[0].getEvents(startDate, endDate);
delete_events(events);
var Calendar = CalendarApp.getCalendarsByName("User_Form")[0].createEvent(taskTitle,startDate,endDate,{description: taskDesc});
}
}// End of Create Calendar