1.目的
前回、開始日・終了日を指定して、Googleカレンダーのその間の予定をスプレッドシートに書き出すものを作りました(【GAS】Googleカレンダーのデータをスプレッドシートに書き出す)。
今回は、開始日を指定して、その日を含め1週間分の予定(イベント)をスプレッドシートに書き出します。1週間毎に予定表を作る場合、これを元に作ったり、予定表にコピペしたりするのに使えます。スプレッドシートのコンテナバインドプロジェクトです。
2.使い方・画面
シートmainとして、カレンダーID、開始日、出力シート名を入力するシートを作っておきます。出力シートと同じ名前のシートがあれば、削除され新しいシートが作られます。mycalendar2を実行するボタンも作ってあります。
出力シートには、5行目に月日、6行目に曜日、7行目その日の予定が書き出されます。複数の予定がある場合は、カンマでつなげて表示します。
3.スクリプト
function mycalendar2() {
const myfile = SpreadsheetApp.getActiveSpreadsheet(); //このファイル(スプレッドシート)
const myspreadsheetId = SpreadsheetApp.getActiveSpreadsheet().getId(); //このスプレッドシートのId
const today = new Date();
const date1 = 'yyyy-MM-dd_HH:mm:ss'; //日付の書式1
const today2 = Utilities.formatDate(today, 'JST', date1);
const sheetname1 = 'main'; //メインシート名
const mysheet = SpreadsheetApp.openById(myspreadsheetId).getSheetByName(sheetname1);
const calendarId = mysheet.getRange('B2').getValue();
const startdate1 = mysheet.getRange('B3').getValue(); //開始年月日
const startDate = new Date(startdate1); //Date型開始年月日(時間はなし)
const startdate2 = Utilities.formatDate(startDate, 'JST', 'yyyy-MM-dd');
const sheetname2 = mysheet.getRange('B5').getValue(); //出力用シート名
//出力シートを作成
const mysheet2 = myfile.insertSheet(); //新シート
//sheetname2と同じシート名があれば削除
const isSheetExist = myfile.getSheetByName(sheetname2);
if (isSheetExist) {
myfile.deleteSheet(isSheetExist);
}
mysheet2.setName(sheetname2); //新シートの名前をsheetname2に
//題 1行目
const mytitle = calendarId + 'のGoogleカレンダー';
mysheet2.getRange(1,1).setValue(mytitle);
//題 2行目
const mytitle2 = startdate2 + '〜 ' + ' の予定';
mysheet2.getRange(2,1).setValue(mytitle2);
//データ取得日 3行目
mysheet2.getRange(3,1).setValue('作成日:' + today2);
//カレンダーからイベントを取得
const mycalendar = CalendarApp.getCalendarById(calendarId);
//取得データをシートに書き出し
//4行目 日付
let row = 5; //書き出し開始は5行目
let colnum = 7; //書き出し列数は7
for (let i = 0;i < colnum;i++) {
let myDate = addDaysToDate(startDate, i);
let md = getGappi(myDate);
let youbi1 = getYoubi(myDate);
let eventTitles = getEventTitlesForDate(mycalendar, myDate);
let cols1 = 1 + i;
mysheet2.getRange(row, cols1).setValue(md);
mysheet2.getRange(row + 1, cols1).setValue(youbi1);
mysheet2.getRange(row + 2, cols1).setValue(eventTitles);
}
//外見整える。1〜7列目、5〜7行目
const myrange1 = mysheet2.getRange('A5:G7');
//外枠と縦線は実線、外枠以外の横線は点線
myrange1.setBorder(true, true, true, true, true, true,'Black',SpreadsheetApp.BorderStyle.SOLID);
myrange1.setBorder(null, null, null, null, null, true,'Black',SpreadsheetApp.BorderStyle.DOTTED);
//5行目と6行目は垂直・水平とも中央揃え
const myrange2 = mysheet2.getRange('A5:G6');
myrange2.setHorizontalAlignment('center').setVerticalAlignment('center');
//7行目
const myrange3 = mysheet2.getRange('A7:G7');
myrange3.setWrap(true); //セル端で折り返し
//7行目は最も多い列に合わせてセルの高さを変更
mysheet2.autoResizeRows(7,1);
//水平は左揃え、垂直は上揃え
myrange3.setHorizontalAlignment('left').setVerticalAlignment('top');
}
//////////
//Date型を受取り月日を返す
function getGappi(date) {
const month = date.getMonth() + 1; //月は0から始まるため、+1
const day = date.getDate();
//月と日が一桁の場合は、頭に0を付けない
let monthString = (month < 10) ? month.toString() : month;
let dayString = (day < 10) ? day.toString() : day;
return monthString + '/' + dayString;
}
///////////
//Date型を受取り曜日を返す
function getYoubi(date) {
let youbi = '無';
switch(date.getDay()){
case 0 :
youbi = '日';
break;
case 1 :
youbi = '月';
break;
case 2 :
youbi = '火';
break;
case 3 :
youbi = '水';
break;
case 4 :
youbi = '木';
break;
case 5 :
youbi = '金';
break;
case 6 :
youbi = '土';
break;
}
return youbi;
}
//////////
//一日のイベント名を返す。引数は、カレンダーオブジェクトと日付(Date型)
function getEventTitlesForDate(calendar, date) {
//指定した日付のイベントを取得
const events = calendar.getEventsForDay(date);
//イベント名を取得し、複数あればカンマでつなげた文字列にする
let eventTitles = events.map(function(event) {
return event.getTitle();
});
return eventTitles.join(', ');
}
//////////
//Date型を受取り*日後のDate型を返す
function addDaysToDate(originalDate, daysToAdd) {
let newDate = new Date(originalDate.getTime());
newDate.setDate(newDate.getDate() + daysToAdd);
return newDate;
}
表示用の月日と曜日を作るために、関数getGappiと関数getYoubiがあります。関数getEventTitlesForDateは、その日のイベント名を得るための関数です。関数addDaysToDateは、開始年月日startDateから、1日分ずつデータを得るときの、
日付を得るのに使います。
4.参考
[GAS]水平方向・垂直方向のテキスト位置を取得・設定する方法
テックアップライフ
[GAS]セルの枠線の位置・色・スタイルを設定する方法
テックアップライフ