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

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

ただいまの
回答率

88.92%

GAS:スプレッドシートからGoogleカレンダーに出力した際、イベントIDも出力したい

解決済

回答 1

投稿

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

nezumimuzen

score 14

前回質問:https://teratail.com/questions/279473

上記の質問よりGoogleカレンダーの予定のイベントIDが必要なのですが、下記のコードではイベントIDが書き出されていないようで、解決案をお教えいただきたく質問いたしました。
下記のコードで行っていることは
スプレッドシート上の予約日を参照にタイトルは「名前」、説明欄に「電話番号」予定を入れ、処理後にイベントIDを書き出す、というような処理を行なっております。
しかし、書き出されたイベントIDは「yyyyyy@google.com」といった形で、Googleカレンダー上で対象の予定を開いてイベントIDを確認したところ、さらに長く、文字列も違うIDでした。
下記のコード上で正式なイベントIDの書き出し方がわかりません。
ご教授願います。。

GAS処理前

名前 電話番号 予約日 イベントID
aa 09000000000 2020/7/24

GAS処理後

名前 電話番号 予約日 イベントID
aa 09000000000 2020/7/24 yyyyyy@google.com
function addTaskEvents() {

var cal = CalendarApp.getCalendarById('xxxxxxxxxxxxxxxxx@group.calendar.google.com'); //カレンダーIDでカレンダーを取得

var objSpreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  var mySheet = objSpreadsheet.getSheetByName("予約"); 
  var dat = mySheet.getDataRange().getValues(); //シートデータを取得

for(var i=1;i<dat.length;i++){
    if(dat[i][3] == ""){

/* 日時をセット */
      var evtDate = new Date(dat[i][2]);
      var evTime = "18:00"
      var Name =dat[i][0]
      var option =dat[i][1]

var myEvt = cal.createEvent(Name , evtDate , evtTime , option);
}

dat[i][3]= myEvt.getID();//イベントIDを入力
}
mySheet.getRange(1,1,i,3).setValues(dat);
}
  • 気になる質問をクリップする

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

回答 1

checkベストアンサー

0

  • createEventの引数が間違っている。正しくは「タイトル、開始日時、終了日時、オプション」
  • オプションはJSON形式で設定する
  • getIDではなくgetId
  • 得られたイベントIDは「「yyyyyy@google.com」という形式だが、これでちゃんと削除を行なえることを確認している(コメント化されたコードを参照)
function addTaskEvents() {
  var cal = CalendarApp.getCalendarById('XXXXXXXX@group.calendar.google.com'); //カレンダーIDでカレンダーを取得

  var objSpreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  var mySheet = objSpreadsheet.getSheetByName("予約"); 
  var dat = mySheet.getDataRange().getValues(); //シートデータを取得

  for(var i = 1; i < dat.length; i++) {
    if (dat[i][3] == "") {
      var title = dat[i][0];
      var startDate = new Date(Utilities.formatDate(dat[i][2], 'Asia/Tokyo', 'yyyy-MM-dd') + " 18:00");
      var endDate = new Date(Utilities.formatDate(dat[i][2], 'Asia/Tokyo', 'yyyy-MM-dd') + " 20:00");
      var options = {
        description: "" + dat[i][1],
      }

      var myEvt = cal.createEvent(title , startDate , endDate, options);
      var eventId = myEvt.getId();
      dat[i][3]= eventId;

      // var checkEvent = cal.getEventById(eventId);
      // checkEvent.deleteEvent();
    }
  }
  mySheet.getRange(1, 1, dat.length, dat[0].length).setValues(dat);
}

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2020/07/24 18:49

    Daregada様

    改めての回答ありがとうございます!
    ご指摘いただいたgetIDの部分が間違っており機能していませんでした!
    また、得られたイベントIDの形式が違っていても動作するとは思わず、テストをおこうなう前に質問してしまいました。
    以降は疑問に思っても一度動作させてから質問しようと思います。
    丁寧な回答誠にありがとうございました!!

    キャンセル

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

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

関連した質問