質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.48%
Google スプレッドシート

Google スプレッドシートは、フリーで利用できる表計算ソフト。Webアプリのためインターネットに接続することで利用できます。チャートやグラフの作成のほか、シートを他のユーザーと共有したり、同時に作業を進めることも可能です。

Google カレンダー

Google カレンダーは、Google社が提供する無料のスケジュール管理ツールです。パソコンやスマートフォン、タブレットなどからアクセスし、スケジュールの追加・変更が可能。Googleアカウントがあれば誰でも使用できます。

Q&A

0回答

339閲覧

カレンダー登録をする際に予定に背景色を付けたい

sh_azikikou

総合スコア16

Google スプレッドシート

Google スプレッドシートは、フリーで利用できる表計算ソフト。Webアプリのためインターネットに接続することで利用できます。チャートやグラフの作成のほか、シートを他のユーザーと共有したり、同時に作業を進めることも可能です。

Google カレンダー

Google カレンダーは、Google社が提供する無料のスケジュール管理ツールです。パソコンやスマートフォン、タブレットなどからアクセスし、スケジュールの追加・変更が可能。Googleアカウントがあれば誰でも使用できます。

0グッド

0クリップ

投稿2023/03/02 04:46

編集2023/03/02 04:47

実現したいこと

GASでカレンダー登録する際に、背景色を予定ごとに設定したい。
カレンダー側の話です。GASの背景色ではありません。

前提

GASで予定をリストで作成しています。
2シートに分かれており、貼り付け元から貼り付け先へ、予定の貼り付け作業をします。
予定を1行以上貼り付けると自動的に、Googleカレンダーへ連携して登録がなされます。
【貼り付け先シート上で変更点があれば都度連携するようにしております】

■■予定毎に背景色を設定したいが、うまくできない。
全ての予定の背景色が真っ黒になる。気分が憂鬱になる。

発生している問題・エラーメッセージ

予定毎に背景色の設定を行いたい。たとえば、7色運用でローテーションを組みたい。 行数を7で割った余りが 1 pale_green  2 pale_red 3 mauve 0 default_color

該当のソースコード

GAS

1/** 2 * Googleカレンダーに予定を追加する 3 */ 4function CreateSchedule() { 5 6 // googleカレンダーの取得 7 // スクリプトプロパティ 8 var scriptProperties = []; 9 const ps = PropertiesService.getScriptProperties().getProperty 10 var scriptProperties = [ps('CALENDAR_ID'),ps('SHEET_ID'),ps('SHEET_URI')]; 11 //var scriptProperties = PropertiesService.getScriptProperties().getProperty('CALENDAR_ID'); 12 const calendar = CalendarApp.getCalendarById(scriptProperties[0]);//CALENDAR_ID 13 14//const calendar = CalendarApp.getDefaultCalendar() 15 16 // 読み取り範囲(表の始まり行と終わり列) 17 const topRow = 2 18 const lastCol = 8 19 const statusCellCol = 1 20 21 // 予定の一覧バッファ内の列(0始まり) 22 const statusNum = 0 23 const startdayNum = 1 24 const startNum = 2 25 const enddayNum = 3 26 const endNum = 4 27 const titleNum = 5 28 const locationNum = 6 29 const descriptionNum = 7 30 31 // シートを取得 例示列挙 32 //const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet() 33 //シートIDで取得して変数「ss」に格納 34// ユーザープロパティ 35 //var userProperties = PropertiesService.getScriptProperties().getProperty('SHEET_ID'); 36 //const sheet = SpreadsheetApp.openById(userProperties).getSheets()[0]; 37 const sheet = SpreadsheetApp.openById(scriptProperties[1]).getSheets()[0];//SHEET_ID 38 39 //取得したシートIDのシート名「シート1」で取得して変数「sheet」に格納 40 //var sheet = ss.getSheetByName('シート1'); 41 // ドキュメントプロパティ 42 //var documentProperties = PropertiesService.getDocumentProperties().setProperty('SHEET_URI');; 43 //var documentProperties = data[2] 44 45 //シートURLで取得して変数「ss」に格納 46//var ss = SpreadsheetApp.openByUrl(documentProperties); 47//var ss = SpreadsheetApp.openByUrl(scriptProperties[2]);//('SHEET_URI') 48 49 //取得したシートURLのシート0番目でシートを取得 50 //var sheet = ss.getSheets()[0]; 51 52 // 予定の最終行を取得 53 let lastRow = sheet.getLastRow() 54 55 //予定の一覧をバッファに取得 56 const contents = sheet.getRange(topRow, 1, sheet.getLastRow(), lastCol).getValues() 57 58 var orange = CalendarApp.EventColor.ORANGE 59 var mauve = CalendarApp.EventColor.MAUVE 60 var pale_blue = CalendarApp.EventColor.PALE_BLUE 61 var red = CalendarApp.EventColor.RED 62 var pale_red = CalendarApp.EventColor.PALE_RED 63 var pale_green = CalendarApp.EventColor.PALE_GREEN 64 var default_color = CalendarApp.EventColor.CYAN 65 66 //順に予定を作成 67 for (let i = 0; i <= lastRow - topRow; i++) { 68 69 //「済」の場合は無視する 70 if (contents[i][statusNum] === "済") { 71 continue 72 } 73 74 // 値をセット 日時はフォーマットして保持 75 let startday = contents[i][startdayNum] 76 let startTime = contents[i][startNum] 77 let endday = contents[i][enddayNum] 78 let endTime = contents[i][endNum] 79 let title = contents[i][titleNum] 80 81 // 場所と詳細をセット 82 let options = { location: contents[i][locationNum], description: contents[i][descriptionNum]} 83 console.log(startday + " " + contents[i][titleNum]) 84 85 try { 86 87// 終了日時を作成 88 if (endday == '') { 89 endday = startday 90 } 91 92 // 開始終了時刻が無ければ終日で設定 93 if (startTime == '' || endTime == '') { 94 //予定を作成 95 calendar.createAllDayEvent( 96 title, 97 startday, 98// endday, 99 options 100 ) 101 102 // 開始終了時刻があれば範囲で設定 103 } else { 104 // 開始日時を作成 105 let startDate = new Date(startday) 106 startDate.setHours(startTime.getHours()) 107 startDate.setMinutes(startTime.getMinutes()) 108 109 let endDate = new Date(endday) 110 endDate.setHours(endTime.getHours()) 111 endDate.setMinutes(endTime.getMinutes()) 112 113 // 予定を作成 114 calendar.createEvent( 115 title, 116 startDate, 117 endDate, 118 options 119 ) 120 } 121 122 if (i % 7 == 1) 123 contents[i].setColor(pale_green); 124 else if (i % 7 == 2) 125 contents[i].setColor(pale_red); 126 else if (i % 7 == 3) 127 contents[i].setColor(mauve); 128 else if (i % 7 == 4) 129 contents[i].setColor(orange); 130 else if (i % 7 == 5) 131 contents[i].setColor(pale_blue); 132 else if (i % 7 == 6) 133 contents[i].setColor(red); 134 //それ以外なら一律の色設定 135 else { 136 contents[i].setColor(default_color); 137 } 138 //予定が作成されたら「済」にする 139 sheet.getRange(topRow + i, statusCellCol).setValue("済") 140 141 // エラーの場合ログ出力する 142 } catch (e) { 143 Logger.log(e) 144 } 145 } //for終了 146 147 var currentSheet = ""; 148 currentSheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet().getIndex(); 149 150 //現在のシートが0番目のシートの場合 【本番用シート】 151 if ( currentSheet == sheet.getIndex()) { 152 // 完了通知 153 Browser.msgBox("予定を追加しました。") 154 155 } else { 156 // 完了通知 させない 157 return; 158 } 159 160 161 162}

試したこと

ここに問題に対して試したことを記載してください。
if条件分岐の箇所が間違ってると思います。
条件分岐を除いた際には予定はデフォルトカラーで登録されます。

補足情報(FW/ツールのバージョンなど)

GASでのカレンダーの登録の様子『貼り付け元』
A列には『貼り付け先』シートで登録なされると『済』と表示されます。

イメージ説明

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

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

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

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

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

bebebe_

2023/03/02 05:27

「contents[i].setColor」の部分でエラーは出てないですか?
sh_azikikou

2023/03/02 06:27

あ。ごめんなさい。 エラーが発生しておりました。もう少し確認してから更新するか削除するか決めます。 ありがとうございます。🐈
bebebe_

2023/03/02 06:37

var event = calendar.createEvent(~~ のような感じでイベントを作成して if (i % 7 == 1) event.setColor(pale_red);~~ とやれば反映されないでしょうか
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問