//=============================================='
//目的 :メール送信処理
//引数 :
//戻り値 :
//=============================================='
function sendEmails()
{
var sheetEvents; //イベントシート格納
var sheetEventsData; //イベントシートのデータ格納
var sheetReceiverGroup; //宛先グループシート格納
var sheetWork //作業用シート
var sheetWorkData //作業用シートデータ
var sheetMainSettings //設定シート
var sheetMailFormat //メールフォーマットシート
var dtNow; //現在時刻を取得
var advanceNoticeDays; //事前通知日数
var ToAddr; //Toアドレス
var CcAddr; //Ccアドレス
var BccAddr; //Bccアドレス
var subject; //件名
var body; //本文
var signature; //署名
var workEventNameColNum; //ワークシートのイベント名列番号
var workDateColNum; //ワークシートの日付列番号
var workEventPlaceColNum; //ワークシートの場所列番号
var workEventNoteColNum; //ワークシートの内容列番号
//▼▼▼▼▼メイン設定シートからのデータを取得▼▼▼▼▼
// シートの取得
sheetMainSettings = SpreadsheetApp.getActive().getSheetByName('設定');
//名前定義から値を取得
advanceNoticeDays = sheetMainSettings.getRange("事前通知日数").getValue();
//To、CC取得
ToAddr = sheetMainSettings.getRange("Toアドレス").getValue();
CcAddr = sheetMainSettings.getRange("Ccアドレス").getValue();
//▲▲▲▲▲設定シートからのデータを取得▲▲▲▲▲
//▼▼▼▼▼イベントシートからのデータを取得▼▼▼▼▼
//イベントシートの取得
sheetEvents = SpreadsheetApp.getActive().getSheetByName('イベント');
//イベントシートをアクティベート
SpreadsheetApp.setActiveSheet(sheetEvents)
// シートのデータを取得(2次元配列)
sheetEventsData = sheetEvents.getSheetValues(3, 1, sheetEvents.getLastRow(), sheetEvents.getLastColumn());
//▲▲▲▲▲イベントシートからのデータを取得▲▲▲▲▲
//▼▼▼▼▼作業シートをクリア▼▼▼▼▼
//作業シートを取得
sheetWork = SpreadsheetApp.getActive().getSheetByName('作業シート');
//作業シートをクリア
ClearSheet('作業シート');
//▲▲▲▲▲作業シートをクリア▲▲▲▲▲
//▼▼▼▼▼宛先グループごとにイベントシートからイベントを取得する▼▼▼▼▼
//イベントシートをアクティベート
SpreadsheetApp.setActiveSheet(sheetEvents);
//イベントシート上で条件に使う列のアルファベットを取得
var eventSendTargetCol = ColumnNoToLetter(getColNum("対象",2,1,2,sheetEvents.getLastColumn()));
var eventNameCol = ColumnNoToLetter(getColNum("イベント名",2,1,2,sheetEvents.getLastColumn()));
var eventDateCol = ColumnNoToLetter(getColNum("日付",2,1,2,sheetEvents.getLastColumn()));
//現在時刻を取得
dtNow = new Date();
//日付の抽出条件を[現在日] + [設定で指定した日付]にセット
var dtSearchTo = dtNow.setDate(dtNow.getDate()+advanceNoticeDays);
dtSearchTo = Utilities.formatDate(dtNow,"JST","yyyy-MM-dd");
//条件日付の変換
dtSearchFrom = new Date();
var dtSearchFrom = Utilities.formatDate(dtSearchFrom,"JST","yyyy-MM-dd");
//作業シートに対象宛先グループのデータを出力
//■条件
//送信対象:〇
//イベント名:NOT NULL
//日付:現在日 <= 日付 <= 現在日-パラメータ
var v = sheetWork.getRange("A1").setFormula
("=QUERY('イベント'!2:999,\"SELECT * WHERE "+eventSendTargetCol+" = '〇' AND "+eventNameCol+" IS NOT NULL AND "+eventDateCol+" >= date '"+dtSearchFrom+"'\ AND "+eventDateCol+" <= date '"+dtSearchTo+"' order by "+eventDateCol+" asc\",true)").getValues();
//出力したイベントデータを取得
//作業シートをアクティベート
SpreadsheetApp.setActiveSheet(sheetWork);
// シートのデータを取得(2次元配列)
var sheetWorkData = sheetWork.getSheetValues(2, 1, sheetWork.getLastRow(), sheetWork.getLastColumn());
//▲▲▲▲▲宛先グループごとにイベントシートからイベントを取得する▲▲▲▲▲
//▼▼▼▼▼メール本文を作成する▼▼▼▼▼
//イベントシート上で条件に使う列のアルファベットを取得
workEventNameColNum = getColNum("イベント名",1,1,1,sheetWork.getLastColumn());
workDateColNum = getColNum("日付",1,1,1,sheetWork.getLastColumn());
workEventPlaceColNum = getColNum("場所",1,1,1,sheetWork.getLastColumn());
workEventNoteColNum = getColNum("内容",1,1,1,sheetWork.getLastColumn());
// シートの取得
sheetMailFormat = SpreadsheetApp.getActive().getSheetByName('メールフォーマット');
//名前定義から文言を取得
subject = sheetMailFormat.getRange("件名").getValue();
body = sheetMailFormat.getRange("本文").getValue();
signature = sheetMailFormat.getRange("署名").getValue();
//イベントデータからメール本文を作成
sheetWorkData.forEach(function(value,item)
{
//イベント名が空白時はスキップ
if(value[workEventNameColNum-1]!="")
{
body = body + "◆" + value[workEventNameColNum-1] + String.fromCharCode(10)
+ "【日付】" + Utilities.formatDate(value[workDateColNum-1],"JST","yyyy-MM-dd") + String.fromCharCode(10)
+ "【場所】" + value[workEventPlaceColNum-1] + String.fromCharCode(10)
+ "【内容】" + value[workEventNoteColNum-1] + String.fromCharCode(10)+ String.fromCharCode(10);
}
});
body = body + signature;
//▲▲▲▲▲メール本文を作成する▲▲▲▲▲
options = {
cc:CcAddr,
bcc:BccAddr,
name:'予定自動送信Gmail',
noReply: true,
};
//メール送信
GmailApp.sendEmail(ToAddr, subject, body,options);
}