スプレッドシートからGoogleカレンダーに反映させるための作業をしていて、9割がた完成したのですが最後の1ピースが中々解決せずにご質問させていただきました。関数であれば解決できるのですが、誤って削除・重くなるなどデメリットの方が大きいと思うのでGASで解決したいと考えています。
B列には①や②のような数字(課の番号)が入り、C列には予定のタイトル(例:打合せ)が入ります。これを連結させてD列に(①打合せ)のように反映させたいです。
現状、色分けで判別しているものの一々予定をクリックしないと、どこの課の予定か分からないので、タイトルの前に課番号を入力したいです。
関数では分かっても、これがGASになると分からなくなってしまいます。
どうかご教示のほど、よろしくお願いいたします。
※読み取り範囲を広げ、上の列を挿入する。これが完成次第、下記の順番を変更する
GAS
1// カレンダーにスケジュールを登録する 2function CreateSchedule() { 3 4 // 読み取り範囲(表の始まり行と終わり列) 5 const topRow = 3 6 const lastCol = 11 7 const statusCellCol = 1 8 9 10 // 予定の一覧バッファ内の列(0始まり) 11 const statusNum = 0 //「完了」反映される列 12 const startdayNum = 2 //開始日時 13 const startNum = 3 //開始時間 14 const enddayNum = 4 //終了日 15 const endNum = 5 //終了時間 16 const titleNum = 6 //タイトル 17 const locationNum = 7 //場所 18 const descriptionNum = 8 //説明 19 //const colorNum = 9 20 const calnameNum = 1 //カレンダー名の列 21 const EventIDCol = 11 //K列 22 23 24 // シートを取得 25 const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet() 26 27 // 予定の最終行を取得 28 const lastRow = sheet.getLastRow() 29 30 //予定の一覧をバッファに取得 31 const contents = sheet.getRange(topRow, 1, sheet.getLastRow(), lastCol).getValues() 32 33 // googleカレンダーの取得 34 let Calendar = CalendarApp.getDefaultCalendar() 35 36 // バッファの内容に従って予定を作成 37 for (let i = 0; i <= lastRow - topRow; i++) { 38 39 //「完了」の場合は無視する 40 if (contents[i][statusNum] === '完了') { 41 continue 42 } 43 44 // 値をセット 日時はフォーマットして保持 45 let startday = contents[i][startdayNum] 46 let startTime = contents[i][startNum] 47 let endday = contents[i][enddayNum] 48 let endTime = contents[i][endNum] 49 let title = contents[i][titleNum] 50 let calname = contents[i][calnameNum] //設定するカレンダー名 51 52 // 場所と詳細をセット 53 let options = { location: contents[i][locationNum], description: contents[i][descriptionNum] } 54 55 console.log(startday + " " + contents[i][titleNum]) 56 57 try { 58 let calevent 59 60 //カレンダーの設定 61 if (calname === "") { 62 calendar = CalendarApp.getDefaultCalendar() 63 } 64 else { 65 let calendars = CalendarApp.getCalendarsByName(calname); 66 for (let s in calendars) { 67 Calendar = calendars[s] 68 console.log("カレンダー指定 -> " + calendars[s].getName()) 69 } 70 } 71 72 // 終了日の有無をチェック 73 if (endday === '') { 74 endday = startday //終了日に開始日を入れておく 75 } 76 77 let startDate = new Date(startday) 78 let endDate = new Date(endday) 79 80 // 開始終了時刻が無ければ終日で設定 81 if (startTime == '' || endTime == '') { 82 endDate.setDate(endDate.getDate() + 1) //★なぜか1日プラスする 83 console.log("設定する終了日 -> " + endDate) 84 85 //終日の予定を作成 86 calevent = Calendar.createAllDayEvent( 87 title, 88 startDate, 89 endDate, 90 options 91 ) 92 93 // 時間指定ありで予定を作成する 94 } else { 95 // 開始日時を設定する 96 startDate.setHours(startTime.getHours()) 97 startDate.setMinutes(startTime.getMinutes()) 98 99 //終了日時を設定する 100 endDate.setHours(endTime.getHours()) 101 endDate.setMinutes(endTime.getMinutes()) 102 103 // 日時付きの予定を作成する 104 calevent = Calendar.createEvent( 105 title, 106 startDate, 107 endDate, 108 options 109 ) 110 } 111 112 //イベントIDをK列に追加する 113 console.log(calevent.getId()) 114 sheet.getRange(topRow + i, EventIDCol).setValue(calevent.getId()) 115 116 117 //予定が作成されたら「完了」にする 118 sheet.getRange(topRow + i, statusCellCol).setValue('完了') 119 120 // エラーの場合ログ出力する 121 } catch (e) { 122 Logger.log(e) 123 } 124 } 125}
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/09/24 11:04 編集
2021/09/25 06:02
2021/09/25 06:03 編集
2021/09/25 06:04
2021/09/25 08:09 編集
2021/09/25 09:29