質問するログイン新規登録
Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

Q&A

解決済

1回答

1040閲覧

GASにてカレンダーに色指定したい

hitct2460

総合スコア11

Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

0グッド

1クリップ

投稿2024/02/29 14:21

0

1

実現したいこと

スプレッドシートに入力したスケジュールを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等で検索した
  • ソースコードを自分なりに変更した
  • 知人に聞いた
  • その他
上記の詳細・結果

シートの内容は反映するが色だけ反映しない

補足

特になし

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

YellowGreen

2024/03/02 02:55 編集

event.setColor(getColorNum(color)); の eventという変数の値が不明です。 実際にお使いのコードをご提示されていますか? 宣言された変数が適切に使われていない部分や 宣言していない変数を参照している部分があります。 修正案を回答欄に記載しました。 必須の部分には★を付けてあります。
guest

回答1

0

ベストアンサー

コードの修正案をお示しします。
余計なものもありますが、必須の部分には★を付けてあります。

JavaScript

1/** 2 * Googleカレンダーに予定を追加する 3 */ 4function myFunction() { 5 const res = Browser.msgBox("Googleカレンダー登録", "この内容で登録しますか?", Browser.Buttons.YES_NO); // var → const 6 if (res == "yes") { 7 8 // googleカレンダーの取得 9 const calendar = CalendarApp.getDefaultCalendar(); 10 11 // 読み取り範囲(表の始まり行と終わり列) 12 const topRow = 1; 13 const lastCol = 8; 14 const statusCellCol = 1; 15 const eventIDCol = 9; // ★追加 16 17 // 予定の一覧バッファ内の列(0始まり) 18 const statusNum = 0; 19 const dayNum = 1; 20 const startNum = 2; 21 const endNum = 3; 22 const titleNum = 4; 23 const locationNum = 5; 24 const descriptionNum = 6; 25 const colorNum = 7; 26 27 // シートを取得 28 const activeSpreadSheet = SpreadsheetApp.getActiveSpreadsheet(); // 現在のSpreadSheetを取得 29 const sheet = activeSpreadSheet.getSheetByName('log'); // シート(SpreadSheetの下のタブ名を指定) 30 31 // 予定の最終行を取得 32 const lastRow = sheet.getLastRow(); // let → const 33 34 //予定の一覧をバッファに取得 35 const contents = sheet.getRange(topRow, 1, sheet.getLastRow(), lastCol).getValues(); 36 37 //順に予定を作成 38 for (let i = 0; i <= lastRow - topRow; i++) { 39 40 //「済」の場合は無視する 41 if (contents[i][statusNum] === "済") { 42 continue; 43 } 44 45 // 値をセット 日時はフォーマットして保持 46 const day = contents[i][dayNum]; // let → const 47 const startTime = contents[i][startNum]; // let → const 48 const endTime = contents[i][endNum]; // let → const 49 const title = contents[i][titleNum]; // let → const 50 51 // 場所と詳細をセット 52 const options = { location: contents[i][locationNum], description: contents[i][descriptionNum] }; // let → const 53 54 console.log(day + " " + contents[i][titleNum]); 55 56 try { 57 let calevent; 58 // 開始終了時刻が無ければ終日で設定 59 if (startTime == '' || endTime == '') { 60 //予定を作成 61 calevent = calendar.createAllDayEvent( // ★修正 62 title, 63 day, 64 options 65 ); 66 67 // 開始終了時刻があれば範囲で設定 68 } else { 69 // 開始日時を作成 70 const startDate = new Date(day); // let → const 71 startDate.setHours(startTime.getHours()); 72 startDate.setMinutes(startTime.getMinutes()); 73 74 // 終了日時を作成 75 const endDate = new Date(day); // let → const 76 endDate.setHours(endTime.getHours()); 77 endDate.setMinutes(endTime.getMinutes()); 78 79 // 予定を作成 80 calevent = calendar.createEvent( // ★修正 81 title, 82 startDate, 83 endDate, 84 options 85 ); 86 } 87 88 //色の設定 89 if (contents[i][colorNum] !== "") { 90 const color = contents[i][colorNum]; // ★修正 91 calevent.setColor(getColorNum(color)); // ★修正 92 } 93 94 console.log(calevent.getId()); //★修正 95 sheet.getRange(topRow + i, statusCellCol).setValue('済'); // ★追加 96 sheet.getRange(topRow + i, eventIDCol).setValue(calevent.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に応じた色の番号を返却する 110 function 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}

投稿2024/03/02 02:40

編集2024/03/02 02:52
YellowGreen

総合スコア868

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hitct2460

2024/03/08 06:22

回答ありがとうございます。 試したところ問題が解決しました! ベストアンサーに選ばせていただきました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.30%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問