由於邦友提問才發現 Google Calendar 上針對非預設的日曆居然沒有刪除全部活動的方法
所以分享一下如何使用 Google Apps Script 製作簡單的程式來刪除全部活動
首先,預設的日曆可以透過日曆的功能刪除全部活動
請到 "日曆設定" => "刪除日曆" => "刪除這個日曆中的所有活動"
至於非預設的就只能靠非日曆的功能解決了
在網路上搜尋可以找到 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"
下面有兩個選項
執行程式的過程中應該會與到 Google 請你開啟存取日曆的權限,這時候只要確認就好了