开发Google脚本:每日6点自动推送延迟交易汇总邮件至负责人
解决Google Sheet延迟交易汇总邮件自动发送问题
没问题,我帮你搞定这个需求!咱们可以调整代码实现按交易负责人汇总延迟交易并批量发送邮件,而且只在有延迟交易时触发发送。下面是完整的实现方案:
核心思路
咱们要做的就是三步:
- 从Sheet里捞取所有数据,筛选出状态包含
delay的交易 - 把这些交易按「负责人邮箱」分组,每个邮箱对应自己的延迟交易列表
- 遍历分组后的结果,给每个负责人发送一封汇总邮件
完整代码实现
打开你的Google Sheet,点击「扩展程序」→「Apps Script」,替换默认代码为以下内容:
function sendDelayDealSummary() { // 1. 配置Sheet信息(根据你的实际情况修改) const sheetName = "你的Sheet名称"; // 替换成你的工作表名称 const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(sheetName); const dataRange = sheet.getDataRange(); const data = dataRange.getValues(); // 跳过表头,从第二行开始遍历 const headerRow = 1; const dealCol = 0; // 交易列索引(A列是0,B列是1,以此类推) const ownerEmailCol = 1; // 负责人邮箱列索引 const statusCol = 2; // 交易状态列索引 // 2. 按负责人邮箱分组延迟交易 const delayDealsByOwner = {}; for (let i = headerRow; i < data.length; i++) { const deal = data[i][dealCol]; const ownerEmail = data[i][ownerEmailCol]; const status = data[i][statusCol]; // 检查状态是否包含"delay"(不区分大小写) if (status.toString().toLowerCase().includes("delay")) { // 如果该负责人还没在对象里,先初始化一个空数组 if (!delayDealsByOwner[ownerEmail]) { delayDealsByOwner[ownerEmail] = []; } // 添加交易信息到对应负责人的列表 delayDealsByOwner[ownerEmail].push({ dealId: deal, status: status }); } } // 3. 如果没有延迟交易,直接结束,不发邮件 if (Object.keys(delayDealsByOwner).length === 0) { console.log("今日无延迟交易,无需发送邮件"); return; } // 4. 给每个负责人发送汇总邮件 const emailSubject = "【延迟交易汇总】你的待处理延迟交易清单"; for (const [email, deals] of Object.entries(delayDealsByOwner)) { // 构建邮件内容(用HTML格式化,更清晰) let emailBody = "<p>您好,以下是您负责的延迟交易清单:</p>"; emailBody += "<ul>"; deals.forEach(deal => { emailBody += `<li>交易编号:${deal.dealId} | 状态:${deal.status}</li>`; }); emailBody += "</ul><p>请及时跟进处理,谢谢!</p>"; // 发送邮件 GmailApp.sendEmail({ to: email, subject: emailSubject, htmlBody: emailBody, noReply: true // 可选:用noreply邮箱发送 }); console.log(`已发送邮件至 ${email},共${deals.length}条延迟交易`); } } // 辅助函数:创建每日6点的定时触发器 function createDailyTrigger() { // 先删除已有的同名触发器,避免重复 const existingTriggers = ScriptApp.getProjectTriggers(); for (const trigger of existingTriggers) { if (trigger.getHandlerFunction() === "sendDelayDealSummary") { ScriptApp.deleteTrigger(trigger); } } // 创建每日上午6点的触发器 ScriptApp.newTrigger("sendDelayDealSummary") .timeBased() .everyDays(1) .atHour(6) .create(); console.log("已创建每日6点的自动发送触发器"); }
关键细节说明
- 列索引调整:代码里的
dealCol、ownerEmailCol、statusCol要对应你Sheet里的实际列(A列是0,B列是1,以此类推),记得修改成你的列位置。 - 不区分大小写判断:用
toLowerCase()把状态转成小写后再判断是否包含delay,避免因为大小写不一致漏判(比如Delay、DELAY都能被识别)。 - 邮件内容格式化:用HTML构建邮件体,生成有序/无序列表,比纯文本更易读。
- 空数据判断:如果当天没有任何延迟交易,脚本会直接结束,不会发送空邮件。
设置自动触发
- 在Apps Script编辑器里,点击顶部的「运行」按钮,先运行一次
sendDelayDealSummary,授权脚本访问你的Google Sheet和Gmail权限(第一次运行需要授权,按照提示操作即可)。 - 再运行
createDailyTrigger函数,这样就会创建一个每日上午6点自动执行sendDelayDealSummary的触发器。
这样就完美实现你的需求啦——每天6点自动检查,有延迟交易就给对应负责人发汇总邮件,没有就啥也不做~
内容的提问来源于stack exchange,提问作者Bharath Vikhram
相关产品推荐
相关产品推荐

