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

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

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

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

解決済

TypeError: Cannot read property 'forEach' of undefinedというエラーを解消したい

atago_IT
atago_IT

総合スコア6

Google Apps Script

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

1回答

1グッド

1クリップ

462閲覧

投稿2022/09/06 07:31

編集2022/09/06 07:50

前提

Googleカレンダーの予定をSlackのチャンネルに投稿するシステムをGASで開発しています。

実現したいこと

  • Googleカレンダーの予定を取得

  • 取得した予定をWebhookを使ってSlackのチャンネルに投稿

  • 48行目の変数schedulesに36行目から42行目のオブジェクトを格納したい

  • 変数schedulesから55行目のforEach文でオブジェクトプロパティを読み込みたい

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

48行目の変数schedules(配列とその中にオブジェクトが入っているはず)がnullになっている。
よって、55行目のforEach文でオブジェクトプロパティを読み込めない。

エラー TypeError: Cannot read property 'forEach' of undefined notifySlack @ コード.gs:55

該当のソースコード

JavaScript

1let calendarIds = { 2 'XXXXXX': 'XXXXXX', 3 'XXXXXX': 'XXXXXX', 4 'XXXXXX': 'XXXXXX' 5}; 6 7// スケジュールを取得 8function getSchedules() { 9 10 let schedules = []; 11 12 // メンバーのGoogleカレンダーIDを取得 13 let calendarId = Object.keys(calendarIds); 14 calendarId.forEach((calendarId)=>{ 15 16 // メンバーの名前をmemberに代入 17 let member = calendarId; 18 19 // myCalendarに各々のcalendarIdを格納 20 let myCalendar = CalendarApp.getCalendarById(calendarIds[calendarId]); 21 22 // 今日の年月日を取得 23 let today = new Date(); 24 let events = myCalendar.getEventsForDay(today); 25 26 for (let i in events) { 27 let event = events[i]; 28 29 let title = event.getTitle(); 30 31 let startHour = event.getStartTime().getHours(); 32 let startMinute = event.getStartTime().getMinutes(); 33 let endHour = event.getEndTime().getHours(); 34 let endMinute = event.getEndTime().getMinutes(); 35 36 return schedules = { 37 title: title, 38 startHour: startHour, 39 startMinute: startMinute, 40 endHour: endHour, 41 endMinute: endMinute 42 }; 43 }; 44 }); 45}; 46 47function notifySlack() { 48 let schedules = getSchedules(); 49 50 Logger.log(schedules); 51 52 let text = '本日の予定は以下になります。' 53 54 55 schedules.forEach((schedule)=>{ 56 text += '・'+schedule+'\n'; 57 }); 58 59 Logger.log(text); 60 61 let payload = { 62 'username': 'お知らせ', 63 'text': text, 64 'channel': '#general' 65 }; 66 67 let options = { 68 'method': 'post', 69 'contentType': 'application/JSON', 70 'payload': JSON.stringify(payload) 71 }; 72 73 const URL = 'https://hooks.slack.com/services/XXXXXX'; 74 UrlFetchApp.fetch(URL, options); 75}

補足情報(FW/ツールのバージョンなど)

Google Apps Script
OS Raspberry Pi OS 64bit

._.👍を押しています

以下のような質問にはグッドを送りましょう

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

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

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

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

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

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

YAmaGNZ

2022/09/06 09:25

Googleカレンダーは共有設定されているのですか?
atago_IT

2022/09/08 09:10

共有設定されています。

回答1

1

ベストアンサー

オブジェクトはnullになっているのではなくそのままだとforEachに対応していません。
キーの配列にすることで実現可能。

JavaScript

1Object.keys(schedules).forEach((key)=> { 2 text += '・'+schedules[key]+'\n'; 3});

投稿2022/09/06 10:32

mosburger0315

総合スコア150

atago_IT👍を押しています

良いと思った回答にはグッドを送りましょう。
グッドが多くついた回答ほどページの上位に表示されるので、他の人が素晴らしい回答を見つけやすくなります。

下記のような回答は推奨されていません。

  • 間違っている回答
  • 質問の回答になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

このような回答には修正を依頼しましょう。

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

ただいまの回答率
86.12%

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

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

質問する

関連した質問

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

Google Apps Script

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。