iT邦幫忙

7

在 Google Calendar 上刪除所有活動

  • 分享至 

  • twitterImage
  •  

由於邦友提問才發現 Google Calendar 上針對非預設的日曆居然沒有刪除全部活動的方法

所以分享一下如何使用 Google Apps Script 製作簡單的程式來刪除全部活動

首先,預設的日曆可以透過日曆的功能刪除全部活動

請到 "日曆設定" => "刪除日曆" => "刪除這個日曆中的所有活動"

http://ithelp.ithome.com.tw/upload/images/20160803/20065840zBI7f8iS9s.png

至於非預設的就只能靠非日曆的功能解決了

在網路上搜尋可以找到 GCalToolkit 這類工具可以做到

但是這就得在工具中提供 Google 的帳密,還是有一點風險

好在 Google 提供了非常方便的程式編輯環境,只要自己寫一點點小程式就可以搞定這問題

關於 Google 提供的程式 Google Apps Script ,想要詳細瞭解可以參考這裡

或是依以下的步驟應該還是可以順利完成這個小程式

第一步是到 Google Drive 先新增一個 Spreadsheet

然後在 Spreadsheet 的選單中點選 "工具" => "指令碼編輯器"

開啟編輯器後在程式編輯區塊輸入以下程式碼

/**
 * 開啟 Spreadsheet 的時候新增 Menu
 */
function onOpen(e) {
  //選單名稱
  var m = SpreadsheetApp.getUi().createMenu('Google Calendar Functions');
  //選單項目
  m.addItem('get calendar ids', 'getids');
  m.addItem('delete all calendar envents', 'delAllCalEvent');
  m.addToUi();
}
/**
 * 取得所有日曆
 */
function getids() {
  //取得目前所在的工作表
  var sht = SpreadsheetApp.getActiveSheet();
  //清除工作表內容
  sht.clear();
  //取得所有日曆
  var ary = CalendarApp.getAllOwnedCalendars();
  if (ary.length === 0) {
    sht.getRange(1, 1).setValue("找不到已存在的日曆");
    return;  
  }
  //設定標題
  sht.getRange(1, 1, 1, 2).setValues([["ID", "名稱"]]);
  //顯示所有日曆
  for (var i=0; i<ary.length; i++){
    sht.getRange(i + 2, 1, 1, 2).setValues([[ary[i].getId(), ary[i].getName()]]);
  }
  //設定欲刪除的日曆輸入框
  sht.getRange(ary.length + 2, 1).setValue("請輸入欲刪除的日曆 ID:");
}
/**
 * 刪除指定日曆下的所有事件
 */
function delAllCalEnvent(){
  //取得目前所在的工作表
  var sht = SpreadsheetApp.getActiveSheet();
  var lastrow = sht.getLastRow();
  var idRow = 0;
  for (var j=1; j<lastrow; j++){
    if (sht.getRange(j, 1).getValue() == "請輸入欲刪除的日曆 ID:"){
      idRow = j;
    }
  }
  if (idRow > 0){
    //取得欲刪除的日曆 ID
    var calid = sht.getRange(idRow, 2).getValue();
    //取得該日曆物件
    var cal = CalendarApp.getCalendarById(calid);
    if (cal != null){
      //取得該日曆下從 1990/01/01 到 2078/12/31 期間所有的事件
      var ary = cal.getEvents(new Date("1990/01/01"), new Date("2078/12/31"));
      for (var i=0; i<ary.length; i++){
        sht.getRange(idRow + i + 1, 1).setValue(ary[i].getTitle());
        ary[i].deleteEvent();
        sht.getRange(idRow + i + 1, 2).setValue("已刪除");
      }
    }
  }
}

儲存之後離開編輯器重新打開 Spreadsheet 應該會看到選單多了一個 "Google Calendar Functions"

下面有兩個選項

  1. get calendar ids : 點選這個選項會取得你的所有日曆並顯示在工作表中,其中的 ID 是 Google Calendar 內部的識別碼,要靠這個才知道要刪哪個日曆的活動
  2. delete all calendar envents: 必須先在工作表中的 "請輸入欲刪除的日曆 ID:" 後一欄輸入上一個功能取得的ID,再點選此選項就可以刪除活動了!

執行程式的過程中應該會與到 Google 請你開啟存取日曆的權限,這時候只要確認就好了


圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

0
a22825412
iT邦新手 5 級 ‧ 2020-07-13 13:28:38

您好
請問我在執行時跳出
找不到以下指令碼函式:delAllCalEvent
該怎麼辦呢

我要留言

立即登入留言