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

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

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

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

Google フォーム

Google フォームは、 Google社が提供しているアンケートフォーム作成および集計ができる無料のツール。Googleアカウントがあれば利用が可能です。集計データは、スプレッドシートに収集され、データ分析もできます。

Google カレンダー

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

Google Apps Script

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

Q&A

解決済

1回答

2121閲覧

どのように改善したらいいか教えてください。

torosalmon

総合スコア1

Google スプレッドシート

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

Google フォーム

Google フォームは、 Google社が提供しているアンケートフォーム作成および集計ができる無料のツール。Googleアカウントがあれば利用が可能です。集計データは、スプレッドシートに収集され、データ分析もできます。

Google カレンダー

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

Google Apps Script

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

0グッド

0クリップ

投稿2021/02/04 12:30

勤務をグーグルカレンダーで管理しているのですが、変則勤務のため同じ勤務内容でも何度も入れないといけないのが手間なので、グーグルフォームで答えた日にちに自動的に勤務が入るようにしたところ、nullで帰ってくるようになりました。
当方初心者でどこを改善したらいいかわからないので教えていただけたらと思います。

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

エラー TypeError: Cannot read property 'createEvent' of null createEvent @ コード.gs:94 executeInPosting @ コード.gs:49

該当のソースコード

以下、太字のところが該当する箇所です。

function executeInPosting() {
//==========================================================
// 設定箇所
//==========================================================
var CALENDAR_ID = '予定を入れたいカレンダーのID@gmail.com';
var SHIFT1_NAME = '早番';
var SHIFT1_START_TIME = '-7:00';
var SHIFT1_END_TIME = '2:00'
var SHIFT2_NAME = '日勤';
var SHIFT2_START_TIME = '-6:30';
var SHIFT2_END_TIME = '3:30';
var SHIFT3_NAME = '遅番';
var SHIFT3_START_TIME = '-4:00';
var SHIFT3_END_TIME = '5:00'
var SHIFT4_NAME = '夜勤';
var SHIFT4_START_TIME = '2:30';
var SHIFT4_END_TIME = '19:00'

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 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 shift1List = String(shift1).split(',');
var shift2List = String(shift2).split(',');
var shift3List = String(shift3).split(',');
var shift4List = String(shift4).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_NAME, date, SHIFT1_START_TIME, SHIFT1_END_TIME);
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_NAME, date, SHIFT2_START_TIME, SHIFT2_END_TIME);
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_NAME, date, SHIFT3_START_TIME, SHIFT3_END_TIME);
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_NAME, date, SHIFT4_START_TIME, SHIFT4_END_TIME);
Logger.log('createEvent() is done.');
}
}

// カレンダーに時間帯のイベントを作成
function createEvent(calendarId, title, date, startTime, endTime) {
var calendar = CalendarApp.getCalendarById(calendarId);
//calendar.createAllDayEvent(title, date);
var startDateTime = new Date(date.getFullYear(), date.getMonth(), date.getDate(), Number(startTime.split(':')[0]), Number(startTime.split(':')[1]));
var endDateTime = new Date(date.getFullYear(), date.getMonth(), date.getDate(), Number(endTime.split(':')[0]), Number(endTime.split(':')[1] ));
Logger.log('startDateTime');
Logger.log(startDateTime);
Logger.log('endDateTime');
Logger.log(endDateTime);
calendar.createEvent(title, startDateTime, endDateTime);
}

なぜnullで帰ってきているかなど、詳細教えていただけると幸いです。

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

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

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

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

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

Zuishin

2021/02/04 12:31

突然 GAS の質問が不自然に増えましたが、何かの課題ですか? それとも複数のアカウントを使っていますか?
torosalmon

2021/02/04 12:34

何かの課題などではなく、自分で使うためにどのようにしたらいいのかご教授願いたいです。
Zuishin

2021/02/04 12:40

calendar が null になっていると思うので確かめてみてください。calendarId が不正かアクセス権がないのかもしれません。
torosalmon

2021/02/04 12:46

解決しました!ありがとうございます。
guest

回答1

0

ベストアンサー

カレンダーIDが間違っていないでしょうか?
引数は、カレンダーID、メールアドレス、カレンダー名になっていますが、
正しくない可能性があります。

引数のカレンダーIDが正しくない場合、
戻り値がNullになると予想されます。

以下を参考に見直してください。
参考1
https://google-apps-script.net/instructions/?p=431

参考2
http://www.googleappsscript.info/2017-12-31/calendar_get_and_register.html

投稿2021/02/04 12:38

WhiteTempest

総合スコア404

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

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

torosalmon

2021/02/04 12:46

解決しました!ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問