GASで3日前リマインドメールの自動送信

イメージ説明
ここに質問の内容を詳しく書いてください。
(例)
TypeScriptで●●なシステムを作っています。
■■な機能を実装中に以下のエラーメッセージが発生しました。

実現したいこと

WBT管理ひょうを作成しています。動作でうまくいってる部分も、念のためコードのところで関連するかもしれませんので記載しています。
①もしも未回答の案件があったら「どの案件があと何日で締切なのか」をGメールで自動送信。
スプレッドシート上のアドレス先に各個人にそれぞれ未回答案件の内容が届く。
トリガーは日付が更新されるごとに設定したい
もしも、未回答案件があったら締切日の3日前に未回答の方へメールが届く。

発生している問題・エラーメッセージ

残り@@日というメールが送られず
5 2022/09/07 4
の記述のみ送信される

該当のソースコード

function myFunction_5_2_4() {
// シートの各データ取得
const ss = SpreadsheetApp.getActiveSpreadsheet();
const sh = ss.getActiveSheet();
const lastRow = sh.getLastRow();
const lastColumn = sh.getLastColumn();
// A-G列が案件情報
const taskInfo = sh.getRange(2, 1, lastRow, 7).getValues();
// 案件情報を(二次元配列から)オブジェクトへ変換
const taskInfo = createObj
(taskInfo);
// 対象者と案件対応状況の開始行と開始列を定義
const startRow = 1;
const startColumn = 7;
// メール送付の判定情報(対象者と案件対応状況の表)を取得 G-J列
const mailInfo = sh.getRange(startRow, startColumn, lastRow, lastColumn - startColumn + 1).getValues();
// 対象者へ未対応案件をまとめてメール通知
informTodoTask
(taskInfo, mailInfo);
}

/**

  • 案件情報を管理番号をキーとするオブジェクトに変換
  • @param {object[][]} 案件情報(二次元配列)
  • @return {object} 案件情報(ステータス:CLOSE, 開始日が未来は除外)

*/
function createObj_(array){
// 案件情報格納用のオブジェクト
let taskInfoObj = {};
for(let i = 1; i < array.length; i++){
// ステータスがOPENで開始日以降のものをオブジェクトに格納
if(array[i][0] === 'OPEN' && new Date() > array[i][4]){
// 各案件番号に対して、案件名、締切日、残日数を格納
taskInfoObj[array[i][6]] = {
task_name: array[i][2], // 案件名
deadline: Utilities.formatDate(new Date(array[i][3]),'JST','yyyy/MM/dd'), // 締切日
remainingDays: array[i][5] // 残日数
}
}
}
return taskInfoObj;
}

/**

  • 各個人の未対応案件をチェックして 対象案件をまとめてメール通知
  • @param {object} 案件情報
  • @param {object[][]} 対象者の案件対応状況

*/
function informTodoTask_(obj, array) {
// 1列(c)ずつメンバーの未対応案件をチェック
// 1件でも未対応があればメール送付
for (let c = 1; c < array[0].length; c++) {
// mailInfo[0][c] 対象者のメールアドレス
// mailInfo[1][c] 対象者名
// 未対応案件を追記する変数
let todoTask = '';
// 締切3日前の未対応案件を追記する変数
let taskDeadline3days = '';
// 1行(r)ずつ未対応案件をチェックしてtodoTaskに格納
for (let r = 3; r < array.length; r++) {
// mailInfo[r][0] 管理番号
// 管理番号がオブジェクトの中にあり、かつ未対応であれば変数todoTaskに案件情報をセット
if (obj[array[r][0]] && array[r][c] === '未') {
// 未対応案件の案件名、締切日、残日数をセット
todoTask += ${obj[array[r][0]]['task_name']} ${obj[array[r][0]]['deadline']} ${obj[array[r][0]]['remainingDays']} \n;
}
// 締切3日前の未完了案件があれば変数taskDeadline3daysに案件情報をセット
if (obj[array[r][0]] &&
array[r][c] === '未' &&
obj[array[r][0]]['remainingDays'] === 'あと3日') {
taskDeadline3days += ${obj[array[r][0]]['task_name']} ${obj[array[r][0]]['deadline']} \n;
}
}

const mailTo = array[0][c]; const targetName = array[1][c]; // 未対応案件があればメール通知 ※ todoTaskが空の場合はfalse if (todoTask) { const mailTitle = '未完了案件のお知らせ'; const now = Utilities.formatDate(new Date(), 'JST', 'yyyy/MM/dd HH:mm'); const mailHeader = `※${now}時点の案件対応状況をお知らせします。`; const mailBody = `${mailHeader}\n${targetName}さん\n\n${todoTask}`; GmailApp.sendEmail(mailTo, mailTitle, mailBody); } // 未対応かつ3日前の案件が存在する場合メール通知 if (taskDeadline3days) { const mailTitle = '締切3日前のお知らせ'; const mailBody = `完了未対応案件がございます。対応案件      \n${taskDeadline3days}`; GmailApp.sendEmail(mailTo, mailTitle, mailBody); }

}
}

### 試したこと ここに問題に対して試したことを記載してください。 ### 補足情報(FW/ツールのバージョンなど) ここにより詳細な情報を記載してください。

コメントを投稿

0 コメント