ご訪問ありがとうございます。
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カレンダーに予定を追加する際に色を設定することができます。
コメント
はじめまして。いつも大変わかりやすい動画、ありがとうございます。
さて、貴殿の作成されたスプレッドシートをコピーしてスクリプトを実行すると問題なくカレンダー登録されるのですが、自分で作成したスプレッドシートにスクリプトをコピペして実行すると下記のように日付・時間がずれてしまいます。原因がわからず困っています。考えられる原因を教えていただけると助かります。
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/
ひろしさん!早速ご回答いただき、また別記事にて解説いただき誠にありがとうございます。
「予定なし」は設定できないのですね。その事実も含め、勉強になりました!