Googleのスプレッドシートからカレンダーへ予定を一括登録したいと考えております。
そこで、日をまたぐ予定について質問したいことがございます。
カレンダー上で直接入力すると、週表示で開始時間から終了時間まで帯がひかれるように表示されるのですが
スプレッドシートからの入力となると終日表示の部分に表示されてしまうのが視覚的にどうも不便に感じています。
添付の画像をご覧ください。
スプレッドシートからの入力でもカレンダー上で入力したように表示されるようにしたいのですが、
何か良い方法はありますでしょうか。
コードは以下の通りです。
function CreateSchedule() { // googleカレンダーの取得 const calender = CalendarApp.getCalendarById("***@group.calendar.google.com") // 読み取り範囲(表の始まり行と終わり列) const topRow = 2 const lastCol = 8 const statusCellCol = 1 // 予定の一覧バッファ内の列(0始まり) const statusNum = 0 const startdayNum = 1 const startNum = 2 const enddayNum = 3 const endNum = 4 const titleNum = 5 // シートを取得 const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet() // 予定の最終行を取得 let lastRow = sheet.getLastRow() //予定の一覧をバッファに取得 const contents = sheet.getRange(topRow, 1, sheet.getLastRow(), lastCol).getValues() //順に予定を作成 for (let i = 0; i <= lastRow - topRow; i++) { //「OK」の場合は無視する if (contents[i][statusNum] === "OK") { continue } // 値をセット 日時はフォーマットして保持 let startday = contents[i][startdayNum] let startTime = contents[i][startNum] let endday = contents[i][enddayNum] let endTime = contents[i][endNum] let title = contents[i][titleNum] try { // 終了日時を作成 if (endday == '') { endday = startday } // 開始終了時刻が無ければ終日で設定 if (startTime == '' || endTime == '') { //予定を作成 calender.createAllDayEvent( title, startday, // endday, options ) // 開始終了時刻があれば範囲で設定 } else { // 開始日時を作成 let startDate = new Date(startday) startDate.setHours(startTime.getHours()) startDate.setMinutes(startTime.getMinutes()) let endDate = new Date(endday) endDate.setHours(endTime.getHours()) endDate.setMinutes(endTime.getMinutes()) // 予定を作成 calender.createEvent( title, startDate, endDate, ) } //予定が作成されたら「OK」にする sheet.getRange(topRow + i, statusCellCol).setValue("OK") // エラーの場合ログ出力する } catch (e) { Logger.log(e) } } // 完了通知 Browser.msgBox("予定を追加しました。") }
よろしくお願いいたします。
あなたの回答
tips
プレビュー