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

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

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

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

Q&A

解決済

2回答

1424閲覧

複数のリソースカレンダーから情報をスプレッドシートに記入したい

easter

総合スコア12

Google Apps Script

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

0グッド

0クリップ

投稿2018/12/04 04:35

実現したいこと

ノンプログラマーの初心者なので意味不明な所もあるかと思いますが、ご容赦下さい…
複数のリソースカレンダーから情報を抽出して、
一つのスプレッドシートにまとめて反映したいと思っています。

発生している問題

複数のリソースカレンダーから情報を抽出しようと下記のコードを作成しましたが、
なぜか実行しても何も情報がスプレッドシートに送られません。
エラーは出ないので何を直せば良いのかわからず困っています…

該当のソースコード

/* 指定月の特定カレンダーからイベントすべてを取得してスプレッドシートに書き出す */ function getCalendar() { var mySheet=SpreadsheetApp.getActiveSheet(); //シートを取得 var RANGE = mySheet.getDataRange().getLastRow()+1; // 新規行番号を取得 var FORMAT_TIME = 'mm/dd'; // スプレッドシート var no=1; //No var myCal=[]; myCal.push(CalendarApp.getCalendarById('リソース1')); //1を取得 myCal.push(CalendarApp.getCalendarById('リソース2')); //2を取得 myCal.push(CalendarApp.getCalendarById('リソース3')); //3を取得 myCal.push(CalendarApp.getCalendarById('リソース4')); //4を取得 myCal.push(CalendarApp.getCalendarById('リソース5')); //5を取得 myCal.push(CalendarApp.getCalendarById('リソース6')); //6を取得 myCal.push(CalendarApp.getCalendarById('リソース7')); //7を取得 myCal.push(CalendarApp.getCalendarById('リソース8')); //8を取得 myCal.push(CalendarApp.getCalendarById('リソース9')); //9を取得 myCal.push(CalendarApp.getCalendarById('リソース10')); //10を取得 myCal.push(CalendarApp.getCalendarById('リソース11')); //11を取得 myCal.push(CalendarApp.getCalendarById('リソース12')); //12を取得 myCal.push(CalendarApp.getCalendarById('リソース13')); //13を取得 myCal.push(CalendarApp.getCalendarById('リソース14')); //14を取得 myCal.push(CalendarApp.getCalendarById('リソース15')); //15を取得 return myCal; var schedules = myCal.getEventsForDay(new Date); //予定オブジェクトの生成 // 予定を繰り返し出力する for(var index = 0; index < schedules.length; index++) { var range = RANGE + index; // IDを出力 mySheet.getRange(range, 1).setValue(no); // カレンダー名を出力 mySheet.getRange(range, 2).setValue(myCal.getName()); // 予定名を出力 mySheet.getRange(range, 3).setValue(schedules[index].getTitle()); // 予約日を出力 mySheet.getRange(range, 4).setValue(schedules[index].getStartTime()).setNumberFormat(FORMAT_TIME); // 実行時間を出力 mySheet.getRange(range, 5).setValue([new Date()]) // 部屋を出力 mySheet.getRange(range, 6).setValue(schedules[index].getLocation()); no++; } } // end function

コードの引用元

複数のカレンダーから抽出するためのコードは以下のサイト様を参考に致しました。
用途の違うGASから引き抜いているので、それが原因なのかな、とは思っているのですが…
https://cyuraharuto.com/gas-googlecalender-get/

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

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

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

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

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

guest

回答2

0

return myCalをしてしまっているのでその後の処理が動いていないのではないでしょうか?
またsetValue()ではなく一時的な配列に代入したあとsetValues()を行う方法に変えると10秒近く速くなると思いますよ
https://qiita.com/sha9sa9/items/8d10f550c673336ba1f4

投稿2018/12/04 04:50

tamanegine

総合スコア177

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

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

easter

2018/12/04 04:59

return myCalを削除した所、次のエラーコードが出てしまいました。 今日の予定がない、ということでしょうか?今日もリソースには予約が入ってるんですが… TypeError: オブジェクト Calendar,Calendar,Calendar,Calendar,Calendar,Calendar,Calendar,Calendar,Calendar,Calendar,Calendar,Calendar,Calendar,Calendar,Calendar で関数 getEventsForDay が見つかりません。(行 27、ファイル「コード」)
tamanegine

2018/12/04 05:17

配列に対して関数を指定しているので myCal[0].getEventsForDay(new Date()) myCal[1].getEventsForDay(new Date()) ・ ・ ・ にしないと動きません。 別の回答者がFor文で取り出す方法などを追加して修正してくれていますので参考にしてください!
papinianus

2018/12/04 08:44

将来参考に訪問されたかた向けにはこちらに書くほうが適切なのでこちらに失礼します。 myCalがカレンダーの配列であることが上記エラーの問題ですが、仮にmyCal[0].getEventsForDay(new Date())書いたとしても、これで取得できるのはイベントの配列なので、scheduleにそのまま入れても、このあたり→`schedules[index].getTitle()`でまた躓きます。 回答したように、二重ループでflatternするような取り出しかたをする必要があります。
guest

0

ベストアンサー

場所の特定のために最初と最後の行をご利用ください。
こうすれば、できると思います。

javascript

1 var no=1; //No 2 3 var myCal=[]; 4 myCal.push(CalendarApp.getCalendarById('リソース1')); //1を取得 5 myCal.push(CalendarApp.getCalendarById('リソース2')); //2を取得 6 myCal.push(CalendarApp.getCalendarById('リソース3')); //3を取得 7 myCal.push(CalendarApp.getCalendarById('リソース4')); //4を取得 8 myCal.push(CalendarApp.getCalendarById('リソース5')); //5を取得 9 myCal.push(CalendarApp.getCalendarById('リソース6')); //6を取得 10 myCal.push(CalendarApp.getCalendarById('リソース7')); //7を取得 11 myCal.push(CalendarApp.getCalendarById('リソース8')); //8を取得 12 myCal.push(CalendarApp.getCalendarById('リソース9')); //9を取得 13 myCal.push(CalendarApp.getCalendarById('リソース10')); //10を取得 14 myCal.push(CalendarApp.getCalendarById('リソース11')); //11を取得 15 myCal.push(CalendarApp.getCalendarById('リソース12')); //12を取得 16 myCal.push(CalendarApp.getCalendarById('リソース13')); //13を取得 17 myCal.push(CalendarApp.getCalendarById('リソース14')); //14を取得 18 myCal.push(CalendarApp.getCalendarById('リソース15')); //15を取得 19 20 var schedules = [] 21 for(var i = 0; i < 15; i++) { 22 var eves = myCal[i].getEventsForDay(new Date()); 23 for(var j = 0; j < eves.length; j++) { 24 schedules.push(eves[j]); 25 } 26 } 27 28 // 予定を繰り返し出力する

投稿2018/12/04 05:02

編集2018/12/04 05:10
papinianus

総合スコア12705

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

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

easter

2018/12/04 08:34

前回に引き続き、ありがとうございます。 頂きましたコードで無事動かせました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問