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

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

ただいまの
回答率

90.34%

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

解決済

回答 2

投稿

  • 評価
  • クリップ 0
  • VIEW 971

easter

score 6

 実現したいこと

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

 発生している問題

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

 該当のソースコード

/* 指定月の特定カレンダーからイベントすべてを取得してスプレッドシートに書き出す */
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/

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

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

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

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

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

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

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

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

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

+1

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

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

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

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/12/04 13:59

    return myCalを削除した所、次のエラーコードが出てしまいました。
    今日の予定がない、ということでしょうか?今日もリソースには予約が入ってるんですが…

    TypeError: オブジェクト Calendar,Calendar,Calendar,Calendar,Calendar,Calendar,Calendar,Calendar,Calendar,Calendar,Calendar,Calendar,Calendar,Calendar,Calendar で関数 getEventsForDay が見つかりません。(行 27、ファイル「コード」)

    キャンセル

  • 2018/12/04 14:17

    配列に対して関数を指定しているので
    myCal[0].getEventsForDay(new Date())
    myCal[1].getEventsForDay(new Date())



    にしないと動きません。
    別の回答者がFor文で取り出す方法などを追加して修正してくれていますので参考にしてください!

    キャンセル

  • 2018/12/04 17:44

    将来参考に訪問されたかた向けにはこちらに書くほうが適切なのでこちらに失礼します。

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

    キャンセル

checkベストアンサー

0

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

  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を取得

  var schedules = []
  for(var i = 0; i < 15; i++) {
    var eves = myCal[i].getEventsForDay(new Date());
    for(var j = 0; j < eves.length; j++) {
      schedules.push(eves[j]);
    }
  }

  // 予定を繰り返し出力する

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

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

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

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/12/04 17:34

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

    キャンセル

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

  • ただいまの回答率 90.34%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

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