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

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

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

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

Google フォーム

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

Google カレンダー

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

Google Apps Script

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

Q&A

解決済

1回答

6652閲覧

TypeError: undefined のメソッド「createEvent」を呼び出せません。(行 22、ファイル「コード」)とエラーがでています。

HirotaTomomi

総合スコア15

Google スプレッドシート

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

Google フォーム

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

Google カレンダー

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

Google Apps Script

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

0グッド

0クリップ

投稿2019/01/10 04:59

前提・実現したいこと

Google Formで簡単な予約フォームを作成しており、作成したスプレッドシートからカレンダーにイベントを反映させたいのですが、実行すると表題の「TypeError: undefined のメソッド「createEvent」を呼び出せません。(行 22、ファイル「コード」)とエラーがでています。」とエラーが出てしまって困っています。
まったくの初心者なのでわかりやすく教えて頂ければ幸いです。

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

エラーメッセージTypeError: undefined のメソッド「createEvent」を呼び出せません。(行 22、ファイル「コード」)とエラーがでています。

### 該当のソースコード

//予約情報をカレンダーに追加
var r = cals[0].createEvent(thing, stime, etime);
}

全体のコード

function sendToCalendar(e) {
//有効なGooglesプレッドシートを開く
var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();

//新規予約された行番号を取得 var num_row = sheet.getLastRow(); //新規予約された行からお客様名を取得 var thing = sheet.getRange(num_row, 5).getValue(); //予約を記載するカレンダーを取得 var cals = CalendarApp.getCalendarsByName("xxx@group.calendar.google.com"); //予約の開始時間を取得 var stime = new Date(sheet.getRange(num_row, 3).getValue()); //予約の開始時間から終了時間を設定 var etime = new Date(sheet.getRange(num_row, 3).getValue()); etime.setMinutes(etime.getMinutes()+60); //予約情報をカレンダーに追加 var r = cals[0].createEvent(thing, stime, etime);

}

試したこと

*var cals = CalendarApp.getCalendarsByName をByIdにしてみた。
*var cals = を var cal にし、該当ソースコードの var r = cals[0]をvar r = cal[0]にしてみた。

デバッグ

cals[0] Array (1039041955) []
stime[0] Date (1039038322) Sat Dec 30 1899 10:00:00 GMT+0900 (JST)
etime[0] Date (1039038137) Sat Dec 30 1899 11:00:00 GMT+0900 (JST)
r undefined undefined

その他必要な情報がありましたらお知らせください。

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

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

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

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

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

guest

回答1

0

ベストアンサー

カレンダーが取得できてません。
(多分ここは大丈夫だとは思いますが、このスクリプトを書いているユーザ(質問者様?)にこのカレンダーが公開されていることを確認してください)

javascript

1var cals = CalendarApp.getCalendarsByName("xxx@group.calendar.google.com");

おそらくそんな名前のカレンダーじゃないと思うので

javascript

1var cals = CalendarApp.getCalendarById("xxx@group.calendar.google.com"); 2 ^^ここ、ByIdのときはCalendarsではなくCalendarになります

こうしたうえで、cals[0]を全部calsで書き直してください。つまり↓

javascript

1function sendToCalendar(e) { 2//有効なGooglesプレッドシートを開く 3var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); 4 5//新規予約された行番号を取得 6var num_row = sheet.getLastRow(); 7 8//新規予約された行からお客様名を取得 9var thing = sheet.getRange(num_row, 5).getValue(); 10 11//予約を記載するカレンダーを取得 12var cals = CalendarApp.getCalendarById("xxx@group.calendar.google.com"); 13 14//予約の開始時間を取得 15var stime = new Date(sheet.getRange(num_row, 3).getValue()); 16 17//予約の開始時間から終了時間を設定 18var etime = new Date(sheet.getRange(num_row, 3).getValue()); 19etime.setMinutes(etime.getMinutes()+60); 20 21//予約情報をカレンダーに追加 22var r = cals.createEvent(thing, stime, etime); 23}

※この質問に関係ない部分は見てませんので、動かない他の原因が出た場合は新規の質問をおねがいします。

投稿2019/01/10 05:26

papinianus

総合スコア12705

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

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

HirotaTomomi

2019/01/11 01:44

おかげさまで解決いたしました!ありがとうございます。困っていたので大変助かりました。 今後も勉強させていただきます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問