2021-08-16
Calendar, GAS, Slack, Spreadsheet
spreadsheetからcalendarに予定を作成する + slackに自動投稿する
spreadsheetに書き込んだ内容をcalendarに自動で追加するGoogle Apps Script(gas)
を参考に, gasで試してみました.
作成
カレンダーIDを取得
- google calendarを開く
- 書き込みたいカレンダーのオーバーフローメニューをクリックし,
設定と共有
を開く カレンダーの統合
のカレンダーID
を以下のcode内で使用する
Google Apps Scriptでcodeを書く
speadsheetを開く
Tools
,Script editor
でgasの編集画面を開くcodeを書いて保存.
XXXXXXXXXXXXXXXXXXXXX@group.calendar.google.com
は書き込み先のカレンダーID. 自分のものに書き換える.
function addEventsToCalendar(){
var sht, i, eventStartDay, eventEndDay, eventname, place, url, added;
sht = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("sheet1");
for(i = 2; i <= sht.getLastRow(); i++){
added = sht.getRange(i,1).getValue();
if(added == "登録する"){
eventStartDay = sht.getRange(i,2).getValue();
eventEndDay = sht.getRange(i,3).getValue();
eventname = sht.getRange(i,4).getValue();
place = sht.getRange(i,5).getValue();
url = sht.getRange(i,6).getValue();
var starttime = sht.getRange(i,7).getValue();
var endtime = sht.getRange(i,8).getValue();
var startDay = Utilities.formatDate(eventStartDay,"JST","yyyy/MM/dd");
var endDay = Utilities.formatDate(eventEndDay,"JST","yyyy/MM/dd");
if(starttime == ""){
var start = new Date(startDay);
}else{
var HStart = starttime.getHours();
var MStart = starttime.getMinutes();
var SStart = starttime.getSeconds();
var start = new Date(startDay+" "+HStart+":"+MStart+":"+SStart);
}
if(endtime == ""){
var MILLIS_PER_DAY = 1000 * 60 * 60 * 24;
var endTemp = new Date(endDay);
var end = new Date(endTemp.getTime() + MILLIS_PER_DAY);
}else{
var HEnd = endtime.getHours();
var MEnd = endtime.getMinutes();
var SEnd = endtime.getSeconds();
var end = new Date(endDay+" "+HEnd+":"+MEnd+":"+SEnd);
}
Cal = CalendarApp.getCalendarById("XXXXXXXXXXXXXXXXXXXXX@group.calendar.google.com");
if(starttime == "" || endtime == ""){
Cal.createAllDayEvent(eventname,start,end,{location:place,description:url});
}else{
Cal.createEvent(eventname,start,end,{location:place,description:url});
}
sht.getRange(i,1).setValue("登録完了");
}
}
}
triggerを設定する
Time-driven
,From spreadshhet
などでtriggerを追加Edit
,Currentproject's triggers
を選択
予定を書く
- speadsheetに戻る
- A - H列に下記フォーマットで予定を書き込む.
カレンダー登録状況 | 開始日 | 終了日 | イベントの名前 | 場所 | URL | 開始時刻 | 終了時刻 |
---|
(予定内容は例です)
カレンダー登録状況
は- 未選択 (何も書き込んでいない際に指定)
- 登録する (予定についての情報を書き終えて, カレンダーに登録したいと思った際に指定)
- 登録完了 (書き込まれるとこのように変化) の3種類にした.
開始時刻
,終了時刻
を指定していない場合は終日の予定として登録される.右にある
登録する
ボタンは手動用のボタン. デバックの時に便利というだけで作成しなくても良い.- 図形を作成して,
Assign script...
で, function名(addEventsToCalendar
)を指定すれば作成できる
- 図形を作成して,
実行
Time-driven
で指定していれば, 指定時間間隔で実行されてgoogle calendarに追加される.- ボタンを作成していた場合は, ボタンをクリックすれば追加される.
カレンダー登録状況
を登録する
にしている行のみ, 実行時にカレンダーに追加される(codeでそう設定しているだけ)
references
追記: slackにも書き込む (2018/09/15)
- Slack API 推奨Tokenについて にてslack用のappを作成し,
- GASでSlackにランダムなメッセージbotを作ってみよう を参考に, Incoming Webhooksを追加し,
下記のようにgasを書き換えればslackにも自動投稿できるようになります
function addEventsToCalender(){
var sht, i, eventStartDay, eventEndDay, eventname, place, url, added;
sht = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("sheet1");
for(i = 2; i <= sht.getLastRow(); i++){
added = sht.getRange(i,1).getValue();
if(added == "登録する"){
eventStartDay = sht.getRange(i,2).getValue();
eventEndDay = sht.getRange(i,3).getValue();
eventname = sht.getRange(i,4).getValue();
place = sht.getRange(i,5).getValue();
url = sht.getRange(i,6).getValue();
var starttime = sht.getRange(i,7).getValue();
var endtime = sht.getRange(i,8).getValue();
var startDay = Utilities.formatDate(eventStartDay,"JST","yyyy/MM/dd");
var endDay = Utilities.formatDate(eventEndDay,"JST","yyyy/MM/dd");
if(starttime == ""){
var start = new Date(startDay);
}else{
var HStart = starttime.getHours();
var MStart = starttime.getMinutes();
var SStart = starttime.getSeconds();
var start = new Date(startDay+" "+HStart+":"+MStart+":"+SStart);
}
if(endtime == ""){
var MILLIS_PER_DAY = 1000 * 60 * 60 * 24;
var endTemp = new Date(endDay);
var end = new Date(endTemp.getTime() + MILLIS_PER_DAY);
}else{
var HEnd = endtime.getHours();
var MEnd = endtime.getMinutes();
var SEnd = endtime.getSeconds();
var end = new Date(endDay+" "+HEnd+":"+MEnd+":"+SEnd);
}
Cal = CalendarApp.getCalendarById("XXXXXXXXXXXXXXXXXXXXXXX@group.calendar.google.com");
if(starttime == "" || endtime == ""){
Cal.createAllDayEvent(eventname,start,end,{location:place,description:url});
}else{
Cal.createEvent(eventname,start,end,{location:place,description:url});
}
postSlack("*" + startDay + " - " + endDay + "* \\n" + eventname + " @ " + place + "\\n" + url);
sht.getRange(i,1).setValue("登録完了");
}
}
}
// slackにメッセージを送る
function postSlack(text){
var url = "https://hooks.slack.com/services/XXXXXXX/XXXXXXX/XXXXXXXXXXXXXXXXXXX";
var options = {
"method" : "POST",
"headers" : {"Content-type":"application/json"},
"payload" : '{"text":"' + text + '"}'
};
UrlFetchApp.fetch(url, options);
}