ご訪問ありがとうございます。
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カレンダーに予定を追加する際に色を設定することができます。
コメント
はじめまして。いつも大変わかりやすい動画、ありがとうございます。
さて、貴殿の作成されたスプレッドシートをコピーしてスクリプトを実行すると問題なくカレンダー登録されるのですが、自分で作成したスプレッドシートにスクリプトをコピペして実行すると下記のように日付・時間がずれてしまいます。原因がわからず困っています。考えられる原因を教えていただけると助かります。
8月7日16時 → 8月6日15時で登録
8月7日16時~8日18時 → 8月6日15時~7日17時で登録
一旦、旧エディターに戻し
「プロジェクトのプロパティ」ー「タイムゾーン」が
(GMT+09:00) 東京 になっているか確認してみてください。
→https://youtu.be/4qPFuM-bbJg?t=412
アドバイス、ありがとうございます。
タイムゾーンが確かにズレてアメリカになっていました。
早速、「東京」に変更しました。
動画にも掲載して頂いていたにもかかわらず、見逃しておりご迷惑をおかけしました。
動画の作成は大変かと存じますが、貴殿のご活躍を祈念いたします。
返信、ありがとうございます。
励みになります。
スプレからカレンダー変更・削除の内容をご教示いただきありがとうございます!早速やってみたところ上手くできました。
大変多くのスクリプトがある中、ありがとうございました。
良かったです。
なかなか、楽しい課題でした。
こちらの設定が悪くて,最初はエラーばかり出ていて凹んでいました。新規にアカウントを作ってセットしなおしたところ,見事に動作いたしました。googleカレンダーはずっと手こずっていたので,これでやっと実務でも使えそうです。
一旦、ハマるとわけがわからなくなりますね。
お役に立てて何よりです。
いつも大変お世話になっております。こちらのGoogleカレンダー登録シートのおかげで、今期の作業効率が劇的に改善されました。すでに便利なこちらのシートですが、追加のリクエストです。私的な仕様になってしまうかもしれませんが、「予定なし&非公開」設定になっている状態でスケジュールを登録したいのですが、実現可能なものでしょうか?{Visibility}を使うのかな・・・と思ったのですが、頭がパンクしそうです。Googleスプレッドシート シート共有フォームからシート添付でお送りさせていただきましたので、ご検討いただけますと幸いです。
すみません、素敵なシートをお送りいただいたのですが、残念ながら
「予定なし」はGASからは設定できないようです。
なお非公開は、
event.setVisibility(CalendarApp.Visibility.PRIVATE)
とやることで実現できます。
「非公開」の実現方法↓
https://technical.verybestcbp.com/registprivate/
ひろしさん!早速ご回答いただき、また別記事にて解説いただき誠にありがとうございます。
「予定なし」は設定できないのですね。その事実も含め、勉強になりました!