-
-
Save hedgejanuary/5dc88ce81d4e5f749cbceac09aa963b2 to your computer and use it in GitHub Desktop.
Upon receipt of a request, email requested information.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
//予定を自動返信する | |
function RespondingRequest() { | |
var list = ""; | |
var s; | |
var CalInUse = [ | |
// 使用するカレンダーのアドレスとそのラベリング | |
["xxxxxxxxxxxxxxxxxxxxxxx@group.calendar.google.com","■○○さんの予定\n"], | |
["xxxxxxxxxxxxxxxxxxxxxxx@group.calendar.google.com", "■不在予定(外出・休暇)\n"], | |
["xxxxxxxxxxxxxxxxxxxxxxx@group.calendar.google.com", "■本社・地域本社の予定\n"], | |
["xxxxxxxxxxxxxxxxxxxxxxx@group.calendar.google.com", "■○○オフィス予定\n"], | |
["xxxxxxxxxxxxxxxxxxxxxxx@group.calendar.google.com", "■〆切\n"], | |
["xxxxxxxxxxxxxxxxxxxxxxx@group.calendar.google.com", "■休業日\n"] | |
]; | |
for(var i=0; i<CalInUse.length; i++){ | |
s = ListUpEvents(CalInfo[i][0]); | |
if (s != "") list += CalInfo[i][1] + s + "\n"; | |
}; | |
// カスタム関数でリクエストの種類を取得する。 | |
var ReqType = CheckRequest(); | |
var ReqSender = ReqType[0]; | |
// メール本文の内容 | |
var FirstPart = ReqSender +"さん\n\nお疲れ様です。\n" + ReqType[2] + "の予定は以下のとおりです。ご確認くださいませ。\n\n"; | |
// 省略文字の説明や、予定登録・変更の際の連絡先(現状、各人が入力する方法を取っていないため。) | |
var SecondPart = "Abbreviations:\n" + | |
"* NR = No Return\n\n"+ | |
"この他に外出予定がある場合には, チームメール <xxxxxxxxxx@abc.com>宛にメール願います。カレンダーを更新いたします。\n"+ | |
"e.g.\n04/01 09:00-10:00 不在: 打合せ @場所\n\n"; | |
// リクエストフォームのアドレス | |
var ThirdPart = "最新の予定表が必要な場合には、下記リンクからリクエストをお送りください。\n" + | |
"<https://goo.gl/forms/xxxxxxxxxxxxxxx>\n"; | |
if (list != "") { | |
var body = FirstPart + list + SecondPart + ThirdPart; | |
EmailToStaff (body) | |
}; | |
}; | |
/** | |
* フォームの回答から、リクエスト送信者情報を返す | |
* @param () なし | |
* @return (string, string, string, date, date) 依頼者、メールアドレス、依頼期間、開始日、終了日 | |
* @customfunction | |
*/ | |
function CheckRequest(){ | |
var ss = SpreadsheetApp.getActiveSpreadsheet(); | |
var RequestSheet = ss.getSheetByName('Form responses'); | |
var EmailSheet = ss.getSheetByName('EmailAddress'); | |
// データを配列に格納 | |
var RequestValues = RequestSheet.getDataRange().getValues(); | |
var EmailValues = EmailSheet.getDataRange().getValues(); | |
// RequestValuesの最終インデックス | |
var rLastIndex = RequestValues.length-1; | |
// リクエストしたスタッフの名前を取得する | |
switch (RequestValues[rLastIndex][2]) { | |
case 'Office A': | |
var StaffName = RequestValues[rLastIndex][3]; | |
break; | |
case 'Office B': | |
var StaffName = RequestValues[rLastIndex][4]; | |
break; | |
}; | |
// スタッフのメールアドレス一覧のスタッフの名前の列を一元配列にする。 | |
var EmailVal = EmailSheet.getRange(1,1,EmailValues.length).getValues(); | |
EmailVal = Array.prototype.concat.apply([],EmailVal); | |
// リクエストしたスタッフの名前が、メールアドレス一覧の配列の何番目にあるかを調べる。 | |
var EmailIndex = EmailVal.indexOf(StaffName); | |
// リクエストしたスタッフのメールアドレス | |
var recipient = EmailValues[EmailIndex][1]; | |
// リクエストしたスケジュールの種類 | |
var CalendarType = RequestValues[rLastIndex][2]; | |
// リクエストしたスケジュールの期間(何日後までのスケジュールがほしいのか) | |
var CalDays; | |
switch (CalendarType) { | |
case '明日': | |
CalDays = 1; | |
break; | |
case '今後7日間': | |
CalDays = 7; | |
break; | |
case '今後30日間': | |
CalDays = 30; | |
break; | |
}; | |
var now = new Date(); | |
var end = new Date(now.getTime() + (CalDays * 24 * 60 * 60 * 1000)); | |
return [StaffName, recipient, CalendarType, now, end]; | |
}; | |
//予定をリストアップ | |
function ListUpEvents(cal_id){ | |
var list = ""; | |
var cal = CalendarApp.getCalendarById(cal_id); | |
// カスタム関数でリクエストの種類を取得する。 | |
var ReqType = CheckRequest(); | |
// リクエストされた期間の予定を取得 | |
var now = ReqType[3]; | |
var end = ReqType[4]; | |
var timezone = "JST"; | |
switch (ReqType[2]) { | |
case '明日': | |
var events = cal.getEventsForDay(end); | |
for(var i=0; i < events.length; i++){ | |
s = ""; | |
if (events[i].isAllDayEvent()) { | |
s += Utilities.formatDate(events[i].getAllDayStartDate(),timezone,"MM/dd\b\b"); | |
} else { | |
s += Utilities.formatDate(events[i].getStartTime(),timezone,"MM/dd HH:mm"); | |
s += Utilities.formatDate(events[i].getEndTime(), timezone,"-HH:mm\b\b"); | |
} | |
s += events[i].getTitle(); | |
list += s + "\n"; | |
}; | |
break; | |
case '今後7日間': | |
case '今後30日間': | |
var events = cal.getEvents(now, end); | |
for(var i=0; i < events.length; i++){ | |
s = ""; | |
if (events[i].isAllDayEvent()) { | |
var startDate = new Date(events[i].getStartTime()); | |
var endDate = new Date(events[i].getEndTime()); | |
if (((endDate - startDate)/(24 * 60 * 60 * 1000)) < 2) { | |
s += Utilities.formatDate(events[i].getAllDayStartDate(),timezone,"MM/dd\b\b"); | |
} else { | |
endDate.setDate(endDate.getDate() - 1); | |
s += Utilities.formatDate(events[i].getAllDayStartDate(),timezone,"MM/dd\b"); | |
s += Utilities.formatDate(endDate, timezone,"-\bMM/dd\b\b"); | |
} | |
} else { | |
s += Utilities.formatDate(events[i].getStartTime(),timezone,"MM/dd HH:mm"); | |
s += Utilities.formatDate(events[i].getEndTime(), timezone,"-HH:mm\b\b"); | |
} | |
s += events[i].getTitle(); | |
list += s + "\n"; | |
}; | |
break; | |
}; | |
return list; | |
}; | |
//リクエストしたスタッフへのメール返信 | |
function EmailToStaff (emailBody){ | |
// カスタム関数でリクエストの種類を取得する。 | |
var ReqType = CheckRequest(); | |
var recipient = ReqType[1]; | |
var copiedRecipient = ''; | |
var sender = 'XXXXXXXXX@abc.com'; | |
var senderName = '山田 太郎'; | |
var timezone = "JST" | |
var now = Utilities.formatDate(ReqType[3], timezone,"MM/dd") | |
var end = Utilities.formatDate(ReqType[4], timezone,"MM/dd") | |
switch (ReqType[2]) { | |
case '明日': | |
var subject = ReqType[2] +'の予定 (' + end + ')'; | |
break; | |
case '今後7日間': | |
case '今後30日間': | |
var subject = ReqType[2] + 'の予定 (' + now + ' - ' + end + ')'; | |
break; | |
}; | |
var body = emailBody; | |
GmailApp.sendEmail(recipient, | |
subject, | |
body, | |
{ | |
bcc:'', | |
cc: copiedRecipient, | |
from: sender, | |
name: senderName | |
}); | |
}; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment