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

Googleカレンダー

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

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

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

前回

スプレッドシートからGoogleカレンダーに予定を流し込む(インポート、連携する)方法
スプレッドシートに記載した予定をGoogleカレンダーに連動させることができます。 「GASって何?」状態であってもコピペで簡単にできます。

今回は、とっても価値の高い方法をお伝えします。


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

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

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

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

動画はこちら

【GAS】Googleカレンダー スプレッドシートから指定したカレンダーを変更する方法1

イベントの取得

イベント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です。

 

続きの動画はこちら

【GAS】Googleカレンダー スプレッドシートから指定したカレンダーを変更する方法2

 

イベント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をコピーしました