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

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

新規登録して質問してみよう
ただいま回答率
85.35%
Google カレンダー

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

Google Apps Script

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

Q&A

解決済

1回答

1025閲覧

GAS googleカレンダー シフト登録 勤務登録

VENTUS

総合スコア1

Google カレンダー

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

Google Apps Script

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

0グッド

0クリップ

投稿2021/05/22 14:05

前提・実現したいこと

google apps script を使用してgoogleカレンダーにシフトを登録したいと思っています。
毎月1日以外のシフト登録はうまくいくのですが毎月1日のみ全ての勤務形態が登録されてします。
改善するにはどうしたらいいでしょうか。

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

function executeInPosting() { //========================================================== // 設定箇所 //========================================================== var CALENDAR_ID = '@group.calendar.google.com'; var SHIFT1 = 'A'; var SHIFT2 = 'B'; var SHIFT3 = 'C'; var SHIFT4 = 'D'; var SHIFT5 = 'H'; var SHIFT6 = '休'; var YEAR_COLUMN = 'B'; var MONTH_COLUMN = 'C'; var SHIFT1_COLUMN = 'D'; var SHIFT2_COLUMN = 'E'; var SHIFT3_COLUMN = 'F'; var SHIFT4_COLUMN = 'G'; var SHIFT5_COLUMN = 'H'; var SHIFT6_COLUMN = 'I'; //---------------------------------------------------------- var sheet = SpreadsheetApp.getActiveSheet(); bottom = sheet.getLastRow(); var year = sheet.getRange(YEAR_COLUMN + bottom).getValue(); var month = sheet.getRange(MONTH_COLUMN + bottom).getValue(); var shift1 = sheet.getRange(SHIFT1_COLUMN + bottom).getValue(); var shift2 = sheet.getRange(SHIFT2_COLUMN + bottom).getValue(); var shift3 = sheet.getRange(SHIFT3_COLUMN + bottom).getValue(); var shift4 = sheet.getRange(SHIFT4_COLUMN + bottom).getValue(); var shift5 = sheet.getRange(SHIFT5_COLUMN + bottom).getValue(); var shift6 = sheet.getRange(SHIFT6_COLUMN + bottom).getValue(); var shift1List = String(shift1).split(','); var shift2List = String(shift2).split(','); var shift3List = String(shift3).split(','); var shift4List = String(shift4).split(','); var shift5List = String(shift5).split(','); var shift6List = String(shift6).split(','); // シフト1を登録 for (var i = 0; i < shift1List.length; i++) { var dateStr = year + '/' + month + '/' + shift1List[i]; Logger.log(dateStr); var date = new Date(dateStr); Logger.log(date); createEvent(CALENDAR_ID, SHIFT1, date,); Logger.log('createEvent() is done.'); } // シフト2を登録 for (var i = 0; i < shift2List.length; i++) { var dateStr = year + '/' + month + '/' + shift2List[i]; Logger.log(dateStr); var date = new Date(dateStr); Logger.log(date); createEvent(CALENDAR_ID, SHIFT2, date); Logger.log('createEvent() is done.'); } // シフト3を登録 for (var i = 0; i < shift3List.length; i++) { var dateStr = year + '/' + month + '/' + shift3List[i]; Logger.log(dateStr); var date = new Date(dateStr); Logger.log(date); createEvent(CALENDAR_ID, SHIFT3, date); Logger.log('createEvent() is done.'); } // シフト4を登録 for (var i = 0; i < shift4List.length; i++) { var dateStr = year + '/' + month + '/' + shift4List[i]; Logger.log(dateStr); var date = new Date(dateStr); Logger.log(date); createEvent(CALENDAR_ID, SHIFT4, date); Logger.log('createEvent() is done.'); } // シフト5を登録 for (var i = 0; i < shift5List.length; i++) { var dateStr = year + '/' + month + '/' + shift5List[i]; Logger.log(dateStr); var date = new Date(dateStr); Logger.log(date); createEvent(CALENDAR_ID, SHIFT5, date); Logger.log('createEvent() is done.'); } // シフト6を登録 for (var i = 0; i < shift6List.length; i++) { var dateStr = year + '/' + month + '/' + shift6List[i]; Logger.log(dateStr); var date = new Date(dateStr); Logger.log(date); createEvent(CALENDAR_ID, SHIFT6, date); Logger.log('createEvent() is done.'); } } // カレンダーに終日のイベントを作成 function createEvent(calendarId, title, date) { const calendar = CalendarApp.getCalendarById(calendarId); const event = calendar.createAllDayEvent(title, date); if (title === '休') event.setColor(CalendarApp.EventColor.PALE_RED); else event.setColor(CalendarApp.EventColor.PALE_BLUE); }

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

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

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

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

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

YT0014

2021/05/23 09:59

シフト予定が記載されているセルの内容をご提示ください。 また、ログに出ている、dateStrの出力もご提示ください。
guest

回答1

0

ベストアンサー

毎月1日以外のシフト登録はうまくいくのですが毎月1日のみ全ての勤務形態が登録されてします。

全ての勤務形態というのがよくわからいのとセルの状態が不明なので想像ですが。。。

コードを拝見する限りだと問題なさそうなので、calendar.createAllDayEvent(title, date)に渡されているdata引数が1日だけ正しく渡せていないかもしれません。

また、
var ??? = sheet.getRange(??? + bottom).getValue();
これ単セルしか取得してないんですが、
このシートはタイトル行と値行の2行しかないということでしょうか?

もう少しシーやカレンダーがどのような状態になっているのか分かれば有用なご提案ができると思います。

投稿2021/05/24 00:51

Tatsunosuke

総合スコア599

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問