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

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

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

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

解決済

スプレッドシートとカレンダー連携のプログラミングについて[getHours][createEvent]

PANDA30271
PANDA30271

総合スコア1

Google スプレッドシート

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

1回答

0評価

0クリップ

167閲覧

投稿2022/06/15 22:30

編集2022/06/17 23:56

html

スプレッドシートとカレンダー連携させたいのですがgetHoursでエラーが出てしまいます。 TypeError: Cannot read property 'getHours' of undefined startTime function registerCalendar() { var calendar= CalendarApp.getCalendarById('Googleid●●●'); var sheet = SpreadsheetApp.getActiveSheet(); var lastRow = sheet .getLastRow(); var contents = sheet.getRange(`A2:E${lastRow}`).getValues(); for(var i=0; i < contents.length; i++){ var{status, day, title, startTime, endTime}=contents[i]; if(status=='TRUE'){ continue; } var date=new Date(day); if(startTime=="" || endTime==""){ calendar.createAllDayEvent(title, date) }else{ var startDateObj = new Date(day); startDateObj .setHours(startTime.getHours()); #エラー箇所 startDateObj.setMinutes(startTime.getMinutes()); var endDateObj = new Date(day); endDateObj.setHours(endTime.getHours()); endDateObj.setMinutes(endTime.getMinutes()); calendar.createEvent(title,startDateObj,endDateObj ); } sheet.getRange(`B${i + 2}`).setValue("TRUE"); } } 周囲の間違えを探して見たのですが実行できません。 何を間違えてしまっているのか、ご指導お願いいたします。

>>>上記はスプレットシートの時間に当てはまる列の書式を時間に変えることで解決できました。しかし、まだエラーが出ています。

TypeError: Cannot read property 'createEvent' of null registerCalendar @ コード.gs:24

html

現在のコード状況 ーーーーーーーーーーーーーーーー function registerCalendar() { var calendar= CalendarApp.getCalendarById('GoogleID●●'); var sheet = SpreadsheetApp.getActiveSheet(); var lastRow = sheet .getLastRow(); var contents = sheet.getRange(`A2:E${lastRow}`).getValues(); for(var i=0; i < contents.length; i++){ var[status, day, title, startTime, endTime]=contents[i]; if(status=='TRUE'){ continue; } var date=new Date(day); if(startTime=="" || endTime==""){ calendar.createAllDayEvent(title, date) }else{ var startDateObj = new Date(day); startDateObj.setHours(startTime.getHours()); startDateObj.setMinutes(startTime.getMinutes()); var endDateObj = new Date(day); endDateObj.setHours(endTime.getHours()); endDateObj.setMinutes(endTime.getMinutes()); calendar.createEvent(title,startDateObj,endDateObj ); #エラー箇所 } sheet.getRange(`A${i + 2}`).setValue("TRUE"); } }

使用しているスプレットシートは下記の表です。
※titleに人物名が入るようにしたいです。

連携済日付名前(title)開始終了
2022/0601山田 花子10:00:0018:00:00
2022/0602山田 花子16:00:0019:00:00
2022/0603山田 花子16:30:0020:00:00
2022/0604山田 花子16:30:0020:00:00
2022/0601鈴木 太郎9:00:0018:00:00
2022/0603鈴木 太郎16:30:0019:00:00

>>>自分で試したこと
createEvent()について検索をかけて他の方の作ったコードと違いを見て見たりしましたが原因がわかりませんでした。

自分では解決できそうにありません。
どうかお力添えお願いいたします。

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

y_waiwai

2022/06/15 22:42

エラーが出たなら、エラーメッセージを提示しましょう エラーメッセージは、よけいな省略翻訳しないで出たそのママをコピペで提示してください
k.a_teratail

2022/06/16 01:50 編集

このようなエラーが発生している認識で問題ないでしょうか? TypeError: Cannot read property 'getHours' of undefined startTimeはスプレッドシートから値を取得した際、 セルの書式によっては文字列になります。 なので、文字列にはgetHours()のメソッドが存在しないので、エラーになっているのではないかと セルの書式を「時間」か「日時」にしても同じエラーが出ますでしょうか? また、スプレッドシートのA2〜E2セルの値はどのようなものでしょうか? 補足: > var{status, day, title, startTime, endTime}=contents[i]; こちらは分割代入を行なっているようですが、デバッグで確認したところ代入できておらず、「undefined」でした。 正しい分割代入は下記になります。 var[status, day, title, startTime, endTime]=contents[i];
PANDA30271

2022/06/16 14:33

y_waiwai様、k.a_teratail様 ご返信ありがとうございます。 エラーの内容はその通りで書式変更で解決できました。 次からはエラ〜メッセージもきちんと載せます。 また、他の修正箇所も見つけていただきありがとうございます。
PANDA30271

2022/06/16 14:50

また別のエラーが出たので質問を編集、加えさせていただきます。

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

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

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

同じタグがついた質問を見る

Google スプレッドシート

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