実現したいこと
スプレッドシートに入力したスケジュールをGASにてカレンダーに反映したいのですが色の指定だけできません。反映させるシートのH列に「RED」と試しに入力していて、下記のコードを書きました。ちなみに色以外は上手に反映できています。問題はどこにあるのかどなたか教えてください。
発生している問題・分からないこと
エラーも起きないが色が反映できない。
該当のソースコード
GAS
1 2 3/** 4 * Googleカレンダーに予定を追加する 5 */ 6function myFunction() { 7 var res = Browser.msgBox("Googleカレンダー登録", "この内容で登録しますか?", Browser.Buttons.YES_NO); 8 if (res == "yes") { 9 10 // googleカレンダーの取得 11 const calendar = CalendarApp.getDefaultCalendar() 12 13 // 読み取り範囲(表の始まり行と終わり列) 14 const topRow = 1 15 const lastCol = 8 16 const statusCellCol = 1 17 18 // 予定の一覧バッファ内の列(0始まり) 19 const statusNum = 0 20 const dayNum = 1 21 const startNum = 2 22 const endNum = 3 23 const titleNum = 4 24 const locationNum = 5 25 const descriptionNum = 6 26 const colorNum = 7 27 28 // シートを取得 29 const activeSpreadSheet = SpreadsheetApp.getActiveSpreadsheet(); // 現在のSpreadSheetを取得 30 const sheet = activeSpreadSheet.getSheetByName('log'); // シート(SpreadSheetの下のタブ名を指定) 31 32 // 予定の最終行を取得 33 let lastRow = sheet.getLastRow() 34 35 //予定の一覧をバッファに取得 36 const contents = sheet.getRange(topRow, 1, sheet.getLastRow(), lastCol).getValues() 37 38 //順に予定を作成 39 for (let i = 0; i <= lastRow - topRow; i++) { 40 41 //「済」の場合は無視する 42 if (contents[i][statusNum] === "済") { 43 continue 44 } 45 46 // 値をセット 日時はフォーマットして保持 47 let day = contents[i][dayNum] 48 let startTime = contents[i][startNum] 49 let endTime = contents[i][endNum] 50 let title = contents[i][titleNum] 51 52 // 場所と詳細をセット 53 let options = { location: contents[i][locationNum], description: contents[i][descriptionNum] } 54 55 console.log(day + " " + contents[i][titleNum]) 56 57 try { 58 let calevent 59 // 開始終了時刻が無ければ終日で設定 60 if (startTime == '' || endTime == '') { 61 //予定を作成 62 calendar.createAllDayEvent( 63 title, 64 day, 65 options 66 ) 67 68 // 開始終了時刻があれば範囲で設定 69 } else { 70 // 開始日時を作成 71 let startDate = new Date(day) 72 startDate.setHours(startTime.getHours()) 73 startDate.setMinutes(startTime.getMinutes()) 74 75 // 終了日時を作成 76 let endDate = new Date(day) 77 endDate.setHours(endTime.getHours()) 78 endDate.setMinutes(endTime.getMinutes()) 79 80 // 予定を作成 81 calendar.createEvent( 82 title, 83 startDate, 84 endDate, 85 options 86 ) 87 } 88 89 //色の設定 90 if (contents[i][cnum] !== "") { 91 let color = contents[i][cnum]; 92 event.setColor(getColorNum(color)); 93 } 94 95 console.log(event.getId()); 96 sheet.getRange(topRow + i, EventIDCol).setValue(event.getId()); 97 // エラーの場合ログ出力する 98 } catch (e) { 99 Logger.log(e) 100 } 101 } 102 103 // 完了通知 104 Browser.msgBox("予定を追加しました。") 105 } else if (res == "no") { 106 Browser.msgBox("登録はキャンセルされました。"); 107 } 108 109 // 色IDに応じた色の番号を返却する 110function getColorNum(color) { 111 let cnum; 112 switch (color) { 113 case "PALE_BLUE": cnum = 1; break; 114 case "PALE_GREEN": cnum = 2; break; 115 case "MAUVE": cnum = 3; break; 116 case "PALE_RED": cnum = 4; break; 117 case "YELLOW": cnum = 5; break; 118 case "ORANGE": cnum = 6; break; 119 case "CYAN": cnum = 7; break; 120 case "GRAY": cnum = 8; break; 121 case "BLUE": cnum = 9; break; 122 case "GREEN": cnum = 10; break; 123 case "RED": cnum = 11; break; 124 default: cnum = 0; break; 125 } 126 console.log(cnum); 127 return cnum; 128} 129} 130
試したこと・調べたこと
- teratailやGoogle等で検索した
- ソースコードを自分なりに変更した
- 知人に聞いた
- その他
上記の詳細・結果
シートの内容は反映するが色だけ反映しない
補足
特になし
event.setColor(getColorNum(color));
の
eventという変数の値が不明です。
実際にお使いのコードをご提示されていますか?
宣言された変数が適切に使われていない部分や
宣言していない変数を参照している部分があります。
修正案を回答欄に記載しました。
必須の部分には★を付けてあります。

回答1件
あなたの回答
tips
プレビュー