前提・実現したいこと
スプレッドシートの入力情報をグーグルカレンダーに自動で反映したい!
上記の機能を実装中に以下のエラーメッセージが発生しました。
発生している問題・エラーメッセージ
TypeError: Cannot read property 'createEvent' of null(行 63、ファイル「コード」)
該当のソースコード
GAS
1/* カレンダーへイベントを登録する */ 2function getsheet() { 3 4/*-前準備-*/ 5 6 //シートの項目を以下変数定義 7 var sht, i, eventday, eventname, place,start, end, added; 8 9 //shtを定義 10 sht = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("sheet1"); 11 12 //シートの2行目〜最終行まで処理を繰り返す 13 for(i = 2; i <= sht.getLastRow(); i++) { 14 15/*-前準備ここまで-*/ 16 17 18/*--スプレッドシートの値を取得して変数へ格納--*/ 19 20//i行1列目の値(イベント日)をeventdayへ格納 21 eventday = sht.getRange(i, 1).getValue(); 22 23//開始日をUtilities.formatDateでフォーマットしてbへ格納 24 var b = Utilities.formatDate(eventday,"JST","yyyy/MM/dd"); 25 26//i行2列目の値(イベントの名前)をeventnameへ格納 27 eventname = sht.getRange(i,2).getValue(); 28 29//i行3列目の値(イベントの場所)をplaceへ格納 30 place = sht.getRange(i,3).getValue(); 31 32//i行4列目の値(開始時刻)をstartへ格納 33 var starttime = sht.getRange(i,4).getValue(); 34 35 var H = starttime.getHours();//starttimeの時間を取得してHへ格納 36 var M = starttime.getMinutes();//starttimeの時間を取得してMへ格納 37 var S = starttime.getSeconds();//starttimeの時間を取得してSへ格納 38 39//new Dateメソッドで開始日時「yyMMdd hh:mm」をstartへ格納 40 var start = new Date(b+" "+H+":"+M+":"+S); 41 42//i行5列目の値(終了時刻)をendへ格納 43 var endtime = sht.getRange(i,5).getValue(); 44 45 var H1 = endtime.getHours();//endtimeの時間を取得してH1へ格納 46 var M1 = endtime.getMinutes();//endtimeの分を取得してM1へ格納 47 var S1 = endtime.getSeconds();//endtimeの秒を取得してS1へ格納 48 49//new Dateメソッドで終了日時「yyMMdd hh:mm」をendへ格納 50 var end = new Date(b+" "+H1+":"+M1+":"+S1); 51 52 53/*--カレンダーへ登録--*/ 54 55//i行6列目の値(イベント登録有無)をaddedへ格納 56 added = sht.getRange(i,6).getValue(); 57 58//addedの値が空白だったらカレンダー登録を実行 59 if(added == "") { 60 Cal = CalendarApp.getCalendarById('kosuke.nagase1219@gmail.com');//<---ここを自分のgmailアドレスへ変更する 61 62//指定のカレンダーIDへインベント登録 63 Cal.createEvent(eventname,start,end,{location:place});//createEvent(タイトル、開始日時、終了日時、オプション) 64 65//カレンダー登録が終わったイベントのaddedへ「登録完了」を記入 66 sht.getRange(i,6).setValue("登録完了"); 67 68 } //ifを閉じる 69 } //forを閉じる 70} //functionを閉じる
試したこと
当方GAS初心者なのですが、createEventの使用方法についてグーグルで検索しました。
補足情報(FW/ツールのバージョンなど)
どのように改善すると利用できるのかご教示いただけますと幸いです。
おそらくですが、開始時刻と終了時刻を取得する箇所がDate型ではなくて文字列型になっているのでnullになっているのではと思います。以下の対応をしたあとに実行してそのログを確認してみてください。
・「var starttime = sht.getRange(i,4).getValue();」の直後に
console.log(typeof starttime);
を追記
・「var endtime = sht.getRange(i,5).getValue();」の直後に
console.log(typeof endtime);
を追記
・ログが見づらくなるので、「Cal.createEvent(eventname,start,end,{location:place});」と「sht.getRange(i,6).setValue("登録完了");」を一旦コメントアウト
ご丁寧にありがとうございます。
早速ですが取り掛かってみます!
返信ありがとうございました。
試してみたのですが、再度
Cannot read property 'createEvent' of null(行 65、ファイル「コード」)
と出てきました
解決しました。
ありがとうございます!
あなたの回答
tips
プレビュー