【GAS】Googleカレンダーに登録した項目を変更する方法

応用

スプレッドシートから予定を入力する方法「全体像」

ご訪問ありがとうございます。

Googleシートマスターのひろしです。

前回

Googleスプレッドシートからカレンダー名を指定してGoogleカレンダーに登録する
  • スプレッドシートからGoogleカレンダーにカレンダー名を指定してカレンダーに登録する事ができます。
  • しかもGASの知識は不要で思考停止で動画のとおりにやるだけで実現できます。
  • 今回は、とっても価値の高い方法をお伝えします。


    これを知ることであなたは、

    • GASによるGoogleカレンダーの削除や変更方法がわかります。
    • スプレッドシートから登録した予定を変更することが可能になります。

    なので、動画をご覧いただき

    と答えてあげてください。

    動画はこちら

    イベントの取得

    イベントIDの取得

    //今日のイベントのタイトルをログに表示
    function updatesample(){
    
      // googleカレンダーの取得
      const Calendar = CalendarApp.getDefaultCalendar()
    
      // 今日のイベントをすべて取得
      const events = Calendar.getEventsForDay(new Date())
    
      // 今日のイベントのループ
      events.forEach(function(event, i , array){
       console.log(event.getId())        //イベントID
        console.log( event.getTitle())
      })
    
    }

     

    イベントIDを指定すれば、
    イベントの変更や削除ができるので

     event.setTitle("タイトルを変更しました")
      event.setDescription("変更後の詳細")
    
      event.deleteEvent()

    カレンダー作成時にイベントIDを保持するようにします。

     

    イベントIDの保持(スプレッドシートに書き出す)

    既存のロジック内で、すでにイベントIDは取得しているので
    そのイベントIDをスプレッドシート上に表示させます。

     
    
    
    
     const EventIDCol = 11 //K列
    
    
    
    
    
    
    
    
    
         //色の設定
          if (contents[i][colorNum] != "") {
            let color = getcolornum(contents[i][colorNum])
            // console.log(title)
            calevent.setColor(color)
          }
    
    //ここから追加
          //イベントIDをK列に追加する
          console.log(calevent.getId())
         sheet.getRange(topRow + i, EventIDCol).setValue(calevent.getId())
    //ここまで追加
    
        //予定が作成されたら「済」にする
          sheet.getRange(topRow + i, statusCellCol).setValue("済")
    
    
    
    

     

    後は、このIDに対して更新すればOKです。

     

    続きの動画はこちら

     

    イベントIDに対するイベントの削除

     

    /**
     * Googleカレンダーからイベントを削除する
     * 先頭カラムが空白の行のイベントを削除する
     */
    function DeletEvent() {
    
    
    
      // 読み取り範囲(表の始まり行と終わり列)
      const topRow = 2
      const lastCol = 11
      const statusCellCol = 1
      const EventIDCol = 11 //K列
    
    
      // 予定の一覧バッファ内の列(0始まり)
      const statusNum = 0
      const startdayNum = 1
      const startNum = 2
      const enddayNum = 3
      const endNum = 4
      const titleNum = 5
      const locationNum = 6
      const descriptionNum = 7
      const colorNum = 8  //色の列
      const calnameNum = 9    //カレンダー名の列
      const eventNum = 10   //イベントID
    
    
      // シートを取得
      const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet()
    
    
      //カレンダーの設定
      let Calendar = CalendarApp.getDefaultCalendar()
    
    
    
      // 予定の最終行を取得
      let lastRow = sheet.getLastRow()
    
    
      //予定の一覧をバッファに取得
      const contents = sheet.getRange(topRow, 1, sheet.getLastRow(), lastCol).getValues()
    
    
      //順に予定を作成
      for (let i = 0; i <= lastRow - topRow; i++) {
    
    
        //「済」の場合は無視する
        if (contents[i][statusNum] === "済") {
          continue
        }
    
    
        let title = contents[i][titleNum]
        let CalendarName = contents[i][calnameNum]    //設定するカレンダー名
        let eventID = contents[i][eventNum]
    
    
        console.log(eventID)
    
    
        try {
          let event
    
    
    
          //カレンダーの切り替え
          if (CalendarName !== "") {
            let calendars = CalendarApp.getCalendarsByName(CalendarName);
            for (let i in calendars) {
              Calendar = calendars[i]
              console.log(calendars[i].getName())
            }
          }
    
    
          //保持していたイベントIDからイベントを削除する
          let delevent = Calendar.getEventById(eventID)
    
    
          //イベントの削除
          delevent.deleteEvent()
    
    
    
    
          // エラーの場合ログ出力する
        } catch (e) {
          Logger.log(e)
        }
      }
    
    
      // 完了通知
      // Browser.msgBox("予定を追加しました。")
    }

     

    ※本ロジックでは、カレンダーを切り替えて削除は行なえません。

     

    カレンダーの変更

    一旦削除して追加します。

     

     
    
    //イベントの更新
    function UpdateEvent() {
      DeletEvent()  //イベントの削除
      CreateSchedule4() //イベントの追加
    }
    

     

    以上です。

    最後までご覧頂きありがとうございます。

     

    【GAS】スプレッドシートからGoogleカレンダーに色付きで登録する方法
    スプレッドシートからGoogleカレンダーに予定を追加する際に色を設定することができます。

    スプレッドシートから予定を入力する方法「全体像」
    Googleカレンダー関連

    コメント

    1. 頑張って勉強します。 より:

      はじめまして。いつも大変わかりやすい動画、ありがとうございます。
      さて、貴殿の作成されたスプレッドシートをコピーしてスクリプトを実行すると問題なくカレンダー登録されるのですが、自分で作成したスプレッドシートにスクリプトをコピペして実行すると下記のように日付・時間がずれてしまいます。原因がわからず困っています。考えられる原因を教えていただけると助かります。

      8月7日16時 → 8月6日15時で登録
      8月7日16時~8日18時 → 8月6日15時~7日17時で登録

      • hiroshi より:

        一旦、旧エディターに戻し
        「プロジェクトのプロパティ」ー「タイムゾーン」が
        (GMT+09:00) 東京 になっているか確認してみてください。
        →https://youtu.be/4qPFuM-bbJg?t=412

        • 頑張って勉強します。 より:

          アドバイス、ありがとうございます。
          タイムゾーンが確かにズレてアメリカになっていました。
          早速、「東京」に変更しました。

          動画にも掲載して頂いていたにもかかわらず、見逃しておりご迷惑をおかけしました。

          動画の作成は大変かと存じますが、貴殿のご活躍を祈念いたします。

    2. プログラミングにハマってます より:

      スプレからカレンダー変更・削除の内容をご教示いただきありがとうございます!早速やってみたところ上手くできました。
      大変多くのスクリプトがある中、ありがとうございました。

    3. 大西 順雄 より:

      こちらの設定が悪くて,最初はエラーばかり出ていて凹んでいました。新規にアカウントを作ってセットしなおしたところ,見事に動作いたしました。googleカレンダーはずっと手こずっていたので,これでやっと実務でも使えそうです。

    4. ねばぎば より:

      いつも大変お世話になっております。こちらのGoogleカレンダー登録シートのおかげで、今期の作業効率が劇的に改善されました。すでに便利なこちらのシートですが、追加のリクエストです。私的な仕様になってしまうかもしれませんが、「予定なし&非公開」設定になっている状態でスケジュールを登録したいのですが、実現可能なものでしょうか?{Visibility}を使うのかな・・・と思ったのですが、頭がパンクしそうです。Googleスプレッドシート シート共有フォームからシート添付でお送りさせていただきましたので、ご検討いただけますと幸いです。

    5. hiroshi より:

      すみません、素敵なシートをお送りいただいたのですが、残念ながら
      「予定なし」はGASからは設定できないようです。

      なお非公開は、
      event.setVisibility(CalendarApp.Visibility.PRIVATE)
      とやることで実現できます。

      「非公開」の実現方法↓
      https://technical.verybestcbp.com/registprivate/

      • ねばぎば より:

        ひろしさん!早速ご回答いただき、また別記事にて解説いただき誠にありがとうございます。
        「予定なし」は設定できないのですね。その事実も含め、勉強になりました!

    タイトルとURLをコピーしました