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

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

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

RPA(Robotic Process Automation)は、ホワイトカラーの間接業務を人間に代行して自動的に行う技術や概念を指します。人間が繰り返すクリックやキーボード入力といった定型的なデスクワークを行うことから、仮想知的労働者(Digital Labor)と呼ばれることがあります。

Google Apps Script

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

Q&A

2回答

7359閲覧

【GAS】スプレッドシートからカレンダーへ予定登録<calendar.createEvent>コマンドエラー

ShoheiKikkawa

総合スコア0

RPA

RPA(Robotic Process Automation)は、ホワイトカラーの間接業務を人間に代行して自動的に行う技術や概念を指します。人間が繰り返すクリックやキーボード入力といった定型的なデスクワークを行うことから、仮想知的労働者(Digital Labor)と呼ばれることがあります。

Google Apps Script

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

0グッド

0クリップ

投稿2020/11/23 05:59

編集2020/11/23 06:19

前提・実現したいこと

【追記】ログを見たところ要因のヒントがありましたので、キャプチャを追加しました。

ノンプログラマで業務効率化や自動ツール実装のためGASを始めたばかりです。

GASでスプレッドシートの情報から予定を一括で自動登録するシステムを作っています。
トライアル段階でスプレッドシートのテスト情報から予定登録する機能を実装中に
以下のエラーメッセージが発生しました。

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

TypeError: Cannot read property 'createEvent' of null(行 42、ファイル「コード」)

ログを確認したところ、登録者<carender_id>,参加者<guests>が特定できないエラーでした。

!ログのキャプチャ明](2b6b34d2a5495e747a793e9120f750e5.png)

該当のソースコード

GAS

1function createEvents() { 2//取得するスプレッドシートの特定 3 var spreadsheet = SpreadsheetApp.getActiveSpreadsheet(); 4 var sheet = spreadsheet.getSheetByName('登録予定'); 5 var values = sheet.getDataRange().getValues(); 6 7 //スプレッドシートの値取得 8 // ※var i の0番目はヘッダーになるので、1からスタートします。 9for (var i = 1; i < values.length; i++) { 10 11 // タイトル 12 var title = values[i][1]; 13 14 // 予定日 15 var date = values[i][2]; 16 17 // 開始時間 18 var startTime = values[i][3]; 19 var startDateTime = new Date(date.getFullYear(), 20 date.getMonth(), 21 date.getDate(), 22 startTime.getHours(), 23 startTime.getMinutes(), 0); 24 // 終了時間 25 var endTime = values[i][4]; 26 var endDateTime = new Date(date.getFullYear(), 27 date.getMonth(), 28 date.getDate(), 29 endTime.getHours(), 30 endTime.getMinutes(), 0); 31 32 var calender_id = [i][8] ; 33 var participant = [i][10]; 34 var option = { 35 guests:participant 36 }; 37 38 //登録カレンダーの特定 39 var calendar = CalendarApp.getCalendarById(calender_id); 40 41 // カレンダーへ登録 42 calendar.createEvent(title,startDateTime,endDateTime,option); 43 44 // i は配列のindexの為、セルを指定する時は +1する必要があります。 45 sheet.getRange(i + 1, 10).setValue(event.getId()); 46} 47} 48 49

試したこと

カレンダー登録のコマンド
calendar.createEvent(title,startDateTime,endDateTime,option);
にて値が正確に入っていないかと思い、
・配列とスプレッドシート上の情報を照合する
・カレンダーIDとguestsのメールアドレスをスプレッドシート上で''で囲う
・optionを無くしてトライしてみる
などしましたが、
同じエラーが起こりました。

補足情報(参照先のスプレッド情報)

G-suitを使用しています。
スプレッドシート上では、下記に情報を配列しています。

[1]会議名/予定/開始時間/終了時間/(1列挟む)/会議室ID /(1列挟む)/カレンダーID/(1列挟む)/[10]ゲストカレンダーID
新規事業会議/ 2021/03/19 /16:00:00/18:00:00/'x@x.google.com'/'x@x.com'/'xx@x.com,xy@x.com'

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

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

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

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

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

guest

回答2

0

配列は 0 からはじまり、C1R1 形式の列番号とは 1 つずれるので、質問コードで [i][8]values[i][8] としても、"(1列挟む)"を calendar id と取り違えてうまくいかないはずです。
なので、全体に 1 ずらすと期待した動きになるのではないでしょうか。

javascript

1function createEvents() { 2//取得するスプレッドシートの特定 3 var spreadsheet = SpreadsheetApp.getActiveSpreadsheet(); 4 var sheet = spreadsheet.getSheetByName('登録予定'); 5 var values = sheet.getDataRange().getValues(); 6 7 //スプレッドシートの値取得 8 // ※var i の0番目はヘッダーになるので、1からスタートします。 9 for (var i = 1; i < values.length; i++) { 10 11 // タイトル 12// var title = values[i][1]; 13 var title = values[i][0]; 14 15 // 予定日 16// var date = values[i][2]; 17 var date = values[i][1]; 18 19 // 開始時間 20// var startTime = values[i][3]; 21 var startTime = values[i][2]; 22 var startDateTime = new Date(date.getFullYear(), 23 date.getMonth(), 24 date.getDate(), 25 startTime.getHours(), 26 startTime.getMinutes(), 0); 27 // 終了時間 28// var endTime = values[i][4]; 29 var endTime = values[i][3]; 30 var endDateTime = new Date(date.getFullYear(), 31 date.getMonth(), 32 date.getDate(), 33 endTime.getHours(), 34 endTime.getMinutes(), 0); 35 36// var calender_id = values[i][8] ; 37// var participant = values[i][10]; 38 var calender_id = values[i][7] ; 39 var participant = values[i][9]; 40 var option = { 41 guests:participant 42 }; 43 44 //登録カレンダーの特定 45 var calendar = CalendarApp.getCalendarById(calender_id); 46 47 // カレンダーへ登録 48// calendar.createEvent(title,startDateTime,endDateTime,option); 49 var event = calendar.createEvent(title,startDateTime,endDateTime,option); 50 51 // i は配列のindexの為、セルを指定する時は +1する必要があります。 52// sheet.getRange(i + 1, 10).setValue(event.getId()); 53 sheet.getRange(i + 1, 11).setValue(event.getId()); 54 } 55}

投稿2020/11/29 11:32

編集2020/11/29 11:34
papinianus

総合スコア12705

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

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

0

オブジェクトの定義というのでしょうか、
value[i][10]

として、ログで特定できなかった値を手当したところ、
解決し、登録できるようになりました!

ただ、登録する会議室に「辞退」されたり、上手く入らなかったりとしています。
定義の仕方が良くないかもしれません・・・

こちらの問題がお分かりの方は是非教えてください!!!

投稿2020/11/23 06:32

ShoheiKikkawa

総合スコア0

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

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

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

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問