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

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

新規登録して質問してみよう
ただいま回答率
85.50%
Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

Q&A

1回答

3303閲覧

スプレッドシートとカレンダー連携 削除

yoyoy

総合スコア14

Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

0グッド

0クリップ

投稿2020/06/26 06:41

施設利用時間をスプレッドシートに一覧化し、そのスプレッドシートの日時をカレンダーに連携するシステムを作成しています。
スプレッドシートには、以下を入力し、終了時間がはいった段階でカレンダーに追記します。
キャンセルが入ったら、I列にキャンセル者名を入力し、入力されたらその予定をカレンダーから削除したいのですが、キャンセルと同じ行の予定が削除されません。
特に、時間がかぶっている場合は、キャンセルされたものとは違うほうの予定が削除されます。
A列 タイムスタンプ
B列スコア
C列 利用者名
D列 日程
E列 開始時間
F列 終了時間
I列 キャンセル

ご確認いただけないでしょうか。

function

1 var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); 2var rng = sheet.getActiveCell(); 3var num_row = rng.getRow(); 4 5//利用者名 6var name = sheet.getRange(num_row,3).getValue(); 7 8 9//開始時間を取得 10 var stime = new Date(sheet.getRange(num_row, 5).getValue()); 11 var stime2 = sheet.getRange(num_row, 5).getDisplayValues(); 12 13 //終了時間を取得 14 var etime = new Date(sheet.getRange(num_row, 6).getValue()); 15 var etime2 = sheet.getRange(num_row, 6).getDisplayValues(); 16 17 18 //日程を取得 19 var ndate = new Date(sheet.getRange(num_row, 4).getValue()); 20 var ndate2 = sheet.getRange(num_row, 4).getDisplayValues(); 21 22 var ndates= new Date(ndate.getFullYear(),ndate.getMonth(),ndate.getDate(),stime.getHours(),stime.getMinutes(),0); 23 var ndatee= new Date(ndate.getFullYear(),ndate.getMonth(),ndate.getDate(),etime.getHours(),etime.getMinutes(),0); 24 25 26 var calslibadd = CalendarApp.getCalendarById("カレンダーID"); 27 28 var events=calslibadd.getEvents(ndates, ndatee); 29 30//カレンダー追加 31if(rng.getColumn()== 6 ){ 32 33 34var r = calslibadd.createEvent(name, ndates, ndatee); 35 36} 37//キャンセルカレンダー削除 38if(rng.getColumn()== 9 ){ 39events[0].deleteEvent(); 40} 41 42 43} 44 45 46

気になる質問をクリップする

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

var events=calslibadd.getEvents(ndates, ndatee);

getEvents関数には引数パターンが2種類あり
①getEvents(startTime, endTime)
②getEvents(startTime, endTime, options)
があります。

②を使えば3つめの引数のoptionsで含まれる文字列を指定したりもできます。
例えばスケジュールに利用者名が含まれるのであれば

var options = { search: name } var events=calslibadd.getEvents(ndates, ndatee, options)

のようにすれば日程に加えて利用者の合致を含めてイベントを取得できます。

投稿2020/06/26 07:30

mkk

総合スコア378

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yoyoy

2020/06/29 06:27

回答ありがとうございます。 var events=calslibadd.getEvents(ndates, ndatee, options)に変更をしてみたのですが、 やはり同じ時間で予約が入っているものは、別の予約が削除されてしまいます。 引き続き、確認をしてはいるのですが、もし、原因がわかりましたら回答よろしくお願いいたします。
mkk

2020/06/29 09:14

同じ時間で予約が入っているものは、同じ内容でスケジュール登録されているんでしょうか? optionsで指定している文字列が両方のスケジュールに該当してしまうとかありませんか?
yoyoy

2020/07/06 03:23

ご回答ありがとうございます。 同じものは指定していないのですが、スプレッドシートを何度も削除などを繰り返していたため、 再度、1から作成しなおして確認してみようと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問