実現したいこと
- 使用期限がきたものに対し全てまとめてメールで、
通知メールは1件1件通知されるものではなくまとめて送られてくる
前提
https://blog.sugiokasystem.co.jp/entry/2022/06/03/171226
https://design-remarks.com/gas-spred-mailalert/
上記サイト二件を見ながら試してみたのですが、まったくわからずでした。
for分をメール内容のところに
発生している問題・エラーメッセージ
上記画像の内容を抽出してメールしてもらっていて
使用期限 登録している日付にきたら
公開 済の場合はメールをしない
未の場合はメールをする
このようにメールがくるんですが、複数件ある場合はメールが1件に対し1件きてしまいます。
コードはこのようになっています。
該当のソースコード
function mailAlerts() { //シートを取得 var bk = SpreadsheetApp.getActiveSpreadsheet(); var sh = bk.getActiveSheet(); var last_row = sh.getLastRow(); //最後の行を取得(繰り返し処理の回数) var begin_row = 2; // 処理を開始する行 (1行目は項目名なので2から) //今日の日付を取得し文字列を成型する var today = new Date(); var formatDate = Utilities.formatDate(today, "JST","yyyy/MM/dd"); //繰り返し処理(1行づつ処理し、行の数だけ繰り返す) for(var i = begin_row; i <= last_row; i++) { //それぞれのセルの中身を取得していく //使用期限(日付は成型する) var sell1 = "E"+i; var value1 = new Date(sh.getRange(sell1).getValue()); //修正後 var value1 = Utilities.formatDate(value1, "JST","yyyy/MM/dd"); //品番 var sell2 = "B"+i; var value2 = sh.getRange(sell2).getValue(); //モデル var sell3 = "C"+i; var value3 = sh.getRange(sell3).getValue(); //URL var sell5 = "D"+i; var value5 = sh.getRange(sell5).getValue(); //使用期限 var sell6 = "E"+i; var value6 = sh.getRange(sell6).getValue(); //公開 var sell7 = "F"+i; var value7 = sh.getRange(sell7).getValue(); //もし、今日の日付と納期が同じで、なおかつ状況が完了でない場合メールを送る if(formatDate == value1 && value7 !== "未"){ GmailApp.sendEmail('tesuto@tesuo', '本日モデルの使用期限'+ value6, '■品番:' + value2 + '■モデル:'+ value3 + '■URL:'+ value5 + '\n■使用期限:'+ value6); } } }
試したこと
if(formatDate == value1 && value7 !== "未"){
GmailApp.sendEmail('tesuto@tesuo',
'本日モデルの使用期限'+ value6,
'■品番:' + value2 + '■モデル:'+ value3 + '■URL:'+ value5 + '\n■使用期限:'+ value6);
こちらを増やして見たが意味なし。
forを使って最後まで該当する項目を探してもらいやってみましたが。
どのように表示していいかわからずで止まってしまいました。
画像を追加しました
10:57
さらに追加しました
追加しました
function alertTasks() { const ss = SpreadsheetApp.getActiveSpreadsheet(); const sheet = ss.getSheetByName('モデル管理'); // 本日の日付を取得 const now = new Date(); // 年月日はそのままで、時間を0時0分0秒にする const date = new Date(now.getFullYear(), now.getMonth(), now.getDate()); // 日付を、'2023/2/14'の形式の文字列にする const formatedDate = Utilities.formatDate(date, 'JST', 'yy/MM/dd'); // 全範囲の値を取得(1行目は項目名なので除く) const values = sheet.getDataRange().getValues().slice(1); // 条件に合致するものに絞り、新規配列を生成 const tasks = values.filter(record => { // 本日の年月日と使用期限の年月日が同じかどうか判定 const isExpiredToday = date.getTime() === record[4].getTime(); // 公開が「未」かどうか判定 const isNotPublished = record[5] === '未'; // どちらもtrueの場合、その行を新しい配列に入れる return isExpiredToday && isNotPublished; }); // 配列の長さが0なら、この関数をここで実行終了(メールを送らない) if (tasks.length === 0) return; // 送信先のメールアドレス const recipient = '送信先のメールアドレス'; // タイトル const subject = `本日使用期限のモデル: ${formatedDate}`; // 本文を生成 const body = tasks.map(([_, pn, model, url]) => { let tempBody = `■品番: ${pn}\n`; tempBody += `■モデル: ${model}\n`; tempBody += `■URL: ${url}\n`; tempBody += `■使用期限: ${formatedDate}\n`; return tempBody; }).join('\n'); // メールを送信 GmailApp.sendEmail(recipient, subject, body); }
回答1件
あなたの回答
tips
プレビュー