Title1

Title2

Title3

5. 設計自動化流程

一、欄位

  1. 表單名稱:讀書會開團
  2. 表單說明:填寫下列表單日曆便會標記時間與地點
  3. 標題*
  4. 主辦人*:LINE群組中的暱稱
  5. 日期*:日期欄位
  6. 開始時間*:時間欄位:持續時間
  7. 結束時間*:時間欄位:持續時間
  8. 地點*:請輸入Google Maps的地點
  9. 備註

二、需求

  1. 建立Google表單
  2. mail通知填報者
  3. mail通知管理者
  4. Line通知管理者
  5. 把事件記錄到日曆
  6. 把地點用Google 地圖顯示

三、說明

  1. 函式:
    https://developers.google.com/apps-script/reference/calendar/calendar#createEvent(String,Date,Date,Object)
    createEvent(title, startTime, endTime, options) 
     
  2. 參量

    名稱 類型 描述
    title String 活動的標題
    startTime Date 活動開始的日期和時間
    endTime Date 事件結束的日期和時間
    options Object 指定高級參數的JavaScript對象,如下所示

     
  3. 進階參數

    名稱 類型 描述
    description String 事件的描述
    location String 活動地點
    guests String 以逗號分隔的電子郵件地址列表,應將其添加為來賓
    sendInvites Boolean 是否發送邀請電子郵件(默認: false

四、程式碼

//Line權杖
var token = "Line權杖"; 
function getFormData(e) {
  var ss = SpreadsheetApp.getActive();
  var ws = ss.getActiveSheet();
  var title = ws.getRange(1, 1, 1, ws.getLastColumn()).getValues()[0];//取得表單中文欄名
  var message = "\n\n";
  var data = {};
  for(i in title){
    message += title[i] + ":" + e.values[i] + "\n\n";
    data[title[i]] = e.values[i];
  }
  //通知Line
  sendLineNotify(message);  
   
  //通知日曆 
  //時間戳記	標題	主辦人	日期	開始時間	結束時間	地點	備註
   
  var title = data['標題'] + "-" + data['主辦人']; //日曆標題
  var startTime = new Date(data['日期'] + " " + data['開始時間']);//開始時間
  var endTime = new Date(data['日期'] + " " + data['結束時間']);//結束時間
  var options = {};
  options['description'] = data['備註'];
  options['location'] = data['地點'];
   
  var color = 11;
  setCalendarTime(title, startTime, endTime, options, color)
   
}

//Line通知
function sendLineNotify(message){
  var options =
   {
     "method"  : "post",
     "payload" : {"message" : message},
     "headers" : {"Authorization" : "Bearer " + token}
   };
   UrlFetchApp.fetch("https://notify-api.line.me/api/notify", options);
}
 
//日曆id
var googleCalendarID = "日曆id";
function setCalendar(title, startDate, description, color) {    
  startDate = new Date(startDate.replace(/-/g, "/"));//轉換日期格式 
    
  //透過ID取得日曆
  var cal = CalendarApp.getCalendarById(googleCalendarID);
    
  //沒有結束日期的全天事件
  var even = cal.createAllDayEvent(title, startDate, {description:description});
  
  //設定形成顏色
  even.setColor(color);  
}

function setCalendarTime(title, startTime, endTime, options, color=11) {   
  //透過ID取得日曆
  var cal = CalendarApp.getCalendarById(googleCalendarID);
    
  //建立事件
  var even = cal.createEvent(title, startTime, endTime, options);
  
  //設定形成顏色
  even.setColor(color);  
  //console.log(startTime);
}

function setCalendarTimeTest() {  
  var title = "標題";
  var startTime = new Date('2020/10/6 9:00:00 GMT+8');
  var endTime =  new Date('2020/10/6 11:00:00 GMT+8');
  var options = {};
  options['description'] = "描述";
  options['location'] = "育將電腦工作室";
  var color =11;
  
  //透過ID取得日曆
  var cal = CalendarApp.getCalendarById(googleCalendarID);
    
  //建立事件
  var even = cal.createEvent(title, startTime, endTime, options);
  
  //設定形成顏色
  even.setColor(color);  
  //console.log(startTime);
}


五、表單畫面



六、日曆畫面

//Line權杖
var token = "Line權杖"; 
function getFormData(e) {
  var ss = SpreadsheetApp.getActive();
  var ws = ss.getActiveSheet();
  var title = ws.getRange(1, 1, 1, ws.getLastColumn()).getValues()[0];//取得表單中文欄名
  //  console.log(title);
  var message = "\n\n";
  var data = {};
  for(i in title){
    if(title[i] !="時間戳記"){
      message += title[i] + ":" + e.values[i] + "\n\n";
    }
    data[title[i]] = e.values[i];
  }
  //通知Line
  sendLineNotify(message);  
    
  //通知日曆 
  //時間戳記	電子郵件地址	標題	主辦人	日期	開始時間	結束時間	地點	備註
    
  var title = data['標題'] + "-" + data['主辦人']; //日曆標題
  var startTime = new Date(data['日期'] + " " + data['開始時間']);//開始時間
  var endTime = new Date(data['日期'] + " " + data['結束時間']);//結束時間
  var options = {};
  options['description'] = data['備註'];
  options['location'] = data['地點'];
    
  var color = 11;
  setCalendarTime(title, startTime, endTime, options, color)
    
}
 
//Line通知
function sendLineNotify(message){
  var options =
   {
     "method"  : "post",
     "payload" : {"message" : message},
     "headers" : {"Authorization" : "Bearer " + token}
   };
   UrlFetchApp.fetch("https://notify-api.line.me/api/notify", options);
}
  
//日曆id
var googleCalendarID = "日曆id";
function setCalendar(title, startDate, description, color) {    
  startDate = new Date(startDate.replace(/-/g, "/"));//轉換日期格式 
     
  //透過ID取得日曆
  var cal = CalendarApp.getCalendarById(googleCalendarID);
     
  //沒有結束日期的全天事件
  var even = cal.createAllDayEvent(title, startDate, {description:description});
   
  //設定形成顏色
  even.setColor(color);  
}
 
function setCalendarTime(title, startTime, endTime, options, color=11) {   
  //透過ID取得日曆
  var cal = CalendarApp.getCalendarById(googleCalendarID);
     
  //建立事件
  var even = cal.createEvent(title, startTime, endTime, options);
   
  //設定形成顏色
  even.setColor(color);  
  //console.log(startTime);
}
 
function setCalendarTimeTest() {
  var title = "222標題1111";
  var startTime = new Date('2020/10/10 9:00:00 GMT+8');
  var endTime =  new Date('2020/10/10 11:00:00 GMT+8');
  var options = {};
  options['description'] = "描述";
  options['location'] = "育將電腦工作室";
  var color =11;
   
  //透過ID取得日曆
  var cal = CalendarApp.getCalendarById(googleCalendarID);
     
  //建立事件
  var even = cal.createEvent(title, startTime, endTime, options);
   
  //設定形成顏色
  even.setColor(color);  
  //console.log(startTime);
}