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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Google

Googleは、アメリカ合衆国に位置する、インターネット関連のサービスや製品を提供している企業です。検索エンジンからアプリケーションの提供まで、多岐にわたるサービスを提供しています。

Q&A

0回答

569閲覧

createEventの用法で困っています、、、

KNagase

総合スコア0

Google

Googleは、アメリカ合衆国に位置する、インターネット関連のサービスや製品を提供している企業です。検索エンジンからアプリケーションの提供まで、多岐にわたるサービスを提供しています。

0グッド

0クリップ

投稿2020/09/09 16:25

前提・実現したいこと

スプレッドシートの入力情報をグーグルカレンダーに自動で反映したい!

上記の機能を実装中に以下のエラーメッセージが発生しました。

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

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/ツールのバージョンなど)

どのように改善すると利用できるのかご教示いただけますと幸いです。

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

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

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

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

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

Supernove

2020/09/09 17:12 編集

おそらくですが、開始時刻と終了時刻を取得する箇所が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("登録完了");」を一旦コメントアウト
KNagase

2020/09/09 23:34

ご丁寧にありがとうございます。 早速ですが取り掛かってみます!
KNagase

2020/09/10 00:07

返信ありがとうございました。 試してみたのですが、再度 Cannot read property 'createEvent' of null(行 65、ファイル「コード」) と出てきました
KNagase

2020/09/10 00:13

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問