Skip to content

Instantly share code, notes, and snippets.

@hedgejanuary
Last active July 30, 2018 01:02
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save hedgejanuary/a9821267a8949421ae719cfb98f6742e to your computer and use it in GitHub Desktop.
Save hedgejanuary/a9821267a8949421ae719cfb98f6742e to your computer and use it in GitHub Desktop.
Posting events from Google Spreadsheet to Google Calendar
/* カレンダーへイベントを登録する */
function pushToCalendar() {
var dSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet1");
var myCal = CalendarApp.getCalendarById("XXXXXXXXX.google.com"); //<---XXXXXを自分のgmailアドレスへ変更する
// シートのデータを配列に格納する
var dSheetVals = dSheet.getDataRange().getValues();
var lastRow = dSheet.getLastRow();
//シートの2行目〜最終行まで処理を繰り返す
for (var i = 1; i < lastRow; i++) {
if (dSheetVals[i][8] ==='Posted') {
continue;
} else {
var schedule = {
staffName: dSheetVals[i][1],
descType: dSheetVals[i][2],
title: dSheetVals[i][3],
startDate: dSheetVals[i][4],
startTime: dSheetVals[i][5],
endDate: dSheetVals[i][6],
endTime: dSheetVals[i][7]
};
var evtTitle = '(' + schedule.staffName + ') ' + schedule.descType + ': ' + schedule.title;
var evtID;
if (schedule.startTime === '') {
var startDate = formatDateTime(schedule.startDate, 0, 0);
var endDate = formatDateTime(schedule.endDate, 1, 0);
// 終日イベント:1日だけの場合と複数日にわたる場合
if (endDate) {
evtID = myCal.createAllDayEvent(evtTitle, startDate, endDate);
} else {
evtID = myCal.createAllDayEvent(evtTitle, startDate);
}
} else {
// 終日イベント以外の処理
var startTime = formatDateTime(schedule.startDate, 0, schedule.startTime);
var endTime = formatDateTime(schedule.startDate, 0, schedule.endTime);
evtID = myCal.createEvent(evtTitle, startTime, endTime);
}
// 登録されたことを表示
dSheet.getRange(i + 1, 9).setValue('Posted');
// イベントIDの入力
dSheet.getRange(i + 1, 1).setValue(evtID.getId());
}
}
}
function formatDateTime(d, ed, t) {
if (t === 0 && ed === 0) {
return new Date(d.getFullYear(), d.getMonth(), d.getDate(), 0, 0, 0);
} else if (t === 0 && ed === 1) {
return new Date(d.getFullYear(), d.getMonth(), d.getDate() + 1, 0, 0, 0);
} else {
return new Date(d.getFullYear(), d.getMonth(), d.getDate(), t.getHours(), t.getMinutes(), 0);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment