我在为一家非营利组织工作,他们希望我安排他们的谷歌日历,这样一旦你创建了一个事件,比如说事件 A,它应该自动创建事件 B、C、D 和 E。
例如 - 如果我创建一个事件“安妮的生日”,那么日历应该自动创建事件(或子事件),例如在截止日期前 1 周的生日计划会议作为事件“B”,在截止日期前 4 天订购蛋糕作为事件“C”,提前 2 天作为事件“D”进行派对准备购物,并在截止日期前的指定日期和时间提前 1 天联系受邀者作为事件“E”,并且应该适用于所有类似的未来事件。
我在为一家非营利组织工作,他们希望我安排他们的谷歌日历,这样一旦你创建了一个事件,比如说事件 A,它应该自动创建事件 B、C、D 和 E。
例如 - 如果我创建一个事件“安妮的生日”,那么日历应该自动创建事件(或子事件),例如在截止日期前 1 周的生日计划会议作为事件“B”,在截止日期前 4 天订购蛋糕作为事件“C”,提前 2 天作为事件“D”进行派对准备购物,并在截止日期前的指定日期和时间提前 1 天联系受邀者作为事件“E”,并且应该适用于所有类似的未来事件。
您应该在脚本中创建一个触发事件,当有新事件添加到您的日历时将触发您的函数。
为此,您必须将脚本与日历同步。您可以按照以下步骤操作:
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)
}
}
我希望这对你有用!