您应该在脚本中创建一个触发事件,当有新事件添加到您的日历时将触发您的函数。
为此,您必须synchronize your script to your calendar。您可以按照以下步骤操作:
- 创建脚本并启用Calendar advance service。
- 使用Events.list() 为您要跟踪创建的事件的日历获取 nextSyncToken(在开始时运行此函数,仅运行一次):
function initialSync() {
var nextSyncToken = Calendar.Events.list('your_calendar_id')["nextSyncToken"];
var sheet = SpreadsheetApp.getActive().getSheetByName('Sheet1');
sheet.getRange('A1').setValue(nextSyncToken)
}
您必须将此 nextSyncToken 存储在某处。我在这个示例中使用了电子表格,但您可以使用数据库或任何适合您的方式(实际上电子表格并不是最安全的数据存储方式,因此我建议您使用其他方式)。
- 创建一个触发事件,每当您更新日历中的事件(创建、编辑或删除事件)时就会触发该事件。同样只运行一次这个函数,你只需要一个触发器:
function createTrigger() {
var t = ScriptApp.newTrigger("createSubevents")
.forUserCalendar("your_calendar_id")
.onEventUpdated()
.create();
}
- 创建函数将在每次创建新事件时创建“子事件”。此函数应与您在刚刚创建的触发器中调用的函数同名。在以下函数中,仅创建了一个“子事件”,重复该过程或创建一个函数来为您要创建多少个子事件执行相同的操作(您应该至少运行一次此函数以获得所有需要的权限):李>
function createSubevents() {
// Getting current syncToken from spreadsheet
var params = {
syncToken: sheet.getRange('A1').getValue()
}
// Retrieve events that were updated since last call
var events = Calendar.Events.list('your_calendar_id', params);
var items = events["items"];
// Update sync token in spreadsheet
sheet.getRange('A1').setValue(events["nextSyncToken"]);
// Loop through updated items (in this case, it should only be one)
for(var i = 0; i < items.length; i++) {
var item = items[i];
var mainStartTime = new Date(item.start.date);
var mainEndTime = new Date(item.end.date);
var dateCreated = new Date(item.created);
var dateUpdated = new Date(item.updated);
// Check if updated event was created (not deleted nor merely edited)
if (dateUpdated - dateCreated < 1000 && item.status != "cancelled") {
var mainEventTitle = item.summary;
// Setting event B title
var eventBTitle = 'whatever_event_B_is_for ' + mainEventTitle;
// Setting event B dates
var numDaysB = 7 // Number of days before main event, edit according to each event
var startTimeB = mainStartTime;
startTimeB.setDate(mainStartTime.getDate() - numDaysB);
var endTimeB = mainEndTime;
endTimeA.setDate(mainEndTime.getDate() - numDaysB);
// Creating event B
createEvent(eventBTitle, startTimeB, endTimeB)
}
}
}
// This function receives a title, a start time and an end time and creates the corresponding event
function createEvent(title, startTime, endTime) {
try {
var calendar = CalendarApp.getCalendarById('your_calendar_id');
var event = calendar.createEvent(title, startTime, endTime)
Logger.log(event)
} catch(err) {
Logger.log(err)
}
}
希望对你有用!