GAS Calendar 操作日曆行程

CalendarApp 服務讓你能夠讀取、建立、修改 Google 日曆中的活動 (Events)。這對於排班系統、會議提醒或自動行程規劃非常有用。

建立與取得行程

你可以手動指定時段來建立活動,或是搜尋一段特定時間內的行程。

/**
 * 在主日曆建立一個新行程
 */
function createCalendarEvent() {
  const calendar = CalendarApp.getDefaultCalendar();
  
  const title = 'GAS 進階課程';
  const startTime = new Date('2024-05-20T14:00:00');
  const endTime = new Date('2024-05-20T16:00:00');
  
  // 建立行程,並加入地點與說明
  const event = calendar.createEvent(title, startTime, endTime, {
    location: 'Google Meet',
    description: '檢視自動化腳本執行進度。'
  });
  
  console.log(`行程已建立:${event.getId()}`);
}

基礎操作函數語法說明

  • CalendarApp.getDefaultCalendar():取得帳戶的主日曆。
  • calendar.createEvent(title, startTime, endTime, options):建立一個定時行程。
  • calendar.getEvents(startTime, endTime):取得特定時間區間內的所有活動陣列。
  • calendar.getEventsForDay(date):取得特定某一天的所有活動。

活動樣式與顏色設定

為了讓日曆看起來更有條理,你可以根據活動性質動態設定顏色。

/**
 * 將所有標題包含「會議」的活動設為紅色
 */
function updateEventColors() {
  const events = CalendarApp.getDefaultCalendar().getEventsForDay(new Date());
  
  events.forEach(event => {
    if (event.getTitle().includes('會議')) {
      // 顏色 ID 1=淺藍, 4=紅, 10=綠 (以此類推)
      event.setColor(CalendarApp.EventColor.RED);
    }
  });
}

顏色與屬性相關函數語法說明

  • event.setColor(color):設定活動在日曆上的顏色。
  • event.setTitle(title) / event.setDescription(desc):動態更新活動內容。
  • event.setAllDayDate(date):將活動轉為「全天活動」。

行程衝突檢查

在自動排程時,檢查該時段是否已有其他工作是非常重要的。

/**
 * 檢查特定時段是否已有行程 (預約系統必備)
 */
function checkAvailability() {
  const start = new Date('2024-06-01T10:00:00');
  const end = new Date('2024-06-01T11:00:00');
  
  const events = CalendarApp.getDefaultCalendar().getEvents(start, end);
  
  if (events.length > 0) {
    console.log('此時段已有行程,無法預約');
    return false;
  }
  
  console.log('此時段目前有空');
  return true;
}

重複性活動 (Recurrence)

你可以建立每週一次、每月一次的循環行程。

/**
 * 建立每週一執行的週會行程
 */
function createRecurringEvent() {
  const calendar = CalendarApp.getDefaultCalendar();
  
  // 建立重複規則:每週執行一次
  const recurrence = CalendarApp.newRecurrence().addWeeklyRule().onlyOnWeekday(CalendarApp.Weekday.MONDAY);
  
  const startTime = new Date('2024-05-01T09:00:00');
  const endTime = new Date('2024-05-01T10:00:00');
  
  calendar.createEventSeries('週會', startTime, endTime, recurrence);
}

重複規則相關函數語法說明

  • CalendarApp.newRecurrence():建立重複規則建構器。
  • addWeeklyRule() / addMonthlyRule() / addDailyRule():設定重複的週期類型。
  • calendar.createEventSeries():傳入重複規則,建立一系列活動。
  • eventSeries.deleteEventSeries():刪除整組重複活動。