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

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

新規登録して質問してみよう
ただいま回答率
85.50%
Google カレンダー

Google カレンダーは、Google社が提供する無料のスケジュール管理ツールです。パソコンやスマートフォン、タブレットなどからアクセスし、スケジュールの追加・変更が可能。Googleアカウントがあれば誰でも使用できます。

Gmail

GmailとはGoogleによって提供されているウェブメールのサービスのことです。

Google Apps Script

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

Q&A

0回答

190閲覧

カレンダーとメールの照合がうまくいかない

Sou23

総合スコア38

Google カレンダー

Google カレンダーは、Google社が提供する無料のスケジュール管理ツールです。パソコンやスマートフォン、タブレットなどからアクセスし、スケジュールの追加・変更が可能。Googleアカウントがあれば誰でも使用できます。

Gmail

GmailとはGoogleによって提供されているウェブメールのサービスのことです。

Google Apps Script

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

0グッド

0クリップ

投稿2022/09/15 06:09

前提

お客様からキャンセルメールがあってキャンセル処理をした際、カレンダー上でキャンセル処理ができているかチェックするシステムを作成しています。

問題

キャンセル処理がされている(カレンダーのタイトルに「キャンセル」と記載されている)場合はOKとするようにコードを書いているのですが、同時間帯に同じお名前でご予約をいただいてしまうとそちらを拾ってキャンセル処理がされていないものとしてみなされてしまいます。

該当のソースコード

GAS

1function calendar(){ 2 3//スプレッドシート情報 4var ss = SpreadsheetApp.getActiveSpreadsheet(); 5var sheet = ss.getSheetByName('シート1'); 6var rows = sheet.getLastRow(); 7 8//照合する日時 9var today = new Date(); 10var customers = []; 11 12for(var i = 2; i <= rows; i++){ 13var date = sheet.getRange(i,2).getValue() 14var enddate = sheet.getRange(i,4).getValue() 15var starttime = new Date(date); 16var endtime = new Date(enddate); 17 18if(starttime.getTime()>=today.getTime()){ 19//カレンダー情報 20var calendar = CalendarApp.getCalendarById('sokichi.asakusa@gmail.com'); 21var events = calendar.getEvents(starttime,endtime); 22 23//カレンダーと照合したい人の名前 24var name = sheet.getRange(i,3).getValues(); 25 26//カレンダーから同時間帯のイベントを抽出 27events.forEach(function(event){ 28 var title = event.getTitle();//タイトル 29 var titlename = title.split('様');//タイトルから人数を抜いて名前だけに 30 var cancel = ('キャンセル'); 31 var changedate = (/日程変更/); 32 var changetime = (/時間変更/); 33var check = titlename[0].toString().indexOf(cancel);//キャンセルのイベントだけを抽出 34var check1 = titlename[0].toString().indexOf(changedate);//日程変更 35var check2 = titlename[0].toString().indexOf(changetime);//時間変更 36//照合結果 37if(check !== -1 || check1 !== -1 || check2 !== -1){//もしそれがキャンセルなどのイベントなら 38 var titlematch = title.toString().match(name); 39 }else if(title.toString().indexOf(name) == -1){ 40 Logger.log(name); 41 }else{ 42 43var date = Utilities.formatDate(new Date(starttime), 'Asia/Tokyo', 'yyyy/MM/dd HH:mm'); 44 customers.push([date,title]);

試したこと

メールの名前からカレンダーのタイトルを照合したりカレンダーのタイトルからメールの名前を照合したりしましたがうまく行きません。
よろしくお願いします。

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

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

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

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

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

sk-sora--ypi

2022/09/17 10:27

現在の判断基準は現在の判断基準は時間と名前(姓)ということでしょうか? それだけだと問題解決は厳しいと思うので、メールアドレスを追加する等の対応が必要な気がします (絶対にこの人とわかるような基準を用意しなければGAS単体でどうにかできるものではないです)
Sou23

2022/09/18 00:33

なるほど、無理な気がしてましたが無理なんですね!ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

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

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

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問