You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Google Sheets与Apps Script中按Hub分组并发送对应数据邮件?

Google Apps Script 按Sender分组并发送对应数据到Hub邮箱

核心逻辑实现

先搞定数据分组,再结合邮箱映射表发邮件,以下是完整可复用的代码,你可以根据自己的表格结构调整:

function sendHubDataEmails() {
  // 1. 获取主数据表格和Hub邮箱映射表
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const dataSheet = ss.getSheetByName("主数据"); // 替换成你的主数据表格名称
  const hubEmailSheet = ss.getSheetByName("Hub邮箱映射"); // 替换成你的邮箱映射表名称

  // 读取主数据(跳过表头,从第2行开始)
  const data = dataSheet.getDataRange().getValues().slice(1);
  // 读取Hub邮箱映射,转成对象方便查找 {Hub名称: 邮箱地址}
  const hubEmails = hubEmailSheet.getDataRange().getValues().reduce((obj, row) => {
    obj[row[0]] = row[1]; // 假设第1列是Hub名称,第2列是邮箱
    return obj;
  }, {});

  // 2. 按Sender字段分组数据
  const groupedData = data.reduce((groups, row) => {
    const sender = row[0]; // 假设第1列是Sender字段,根据你的表格调整索引
    if (!groups[sender]) {
      groups[sender] = [];
    }
    groups[sender].push(row);
    return groups;
  }, {});

  // 3. 遍历每个Hub,生成邮件并发送
  for (const hubName in groupedData) {
    const email = hubEmails[hubName];
    if (!email) {
      console.log(`未找到${hubName}对应的邮箱,跳过发送`);
      continue;
    }

    // 把分组数据转成HTML表格(邮件里显示更清晰)
    const tableHtml = generateHtmlTable(groupedData[hubName], dataSheet.getDataRange().getValues()[0]); // 传入表头
    const subject = `${hubName}专属数据报表`;
    const body = `您好,以下是${hubName}的对应数据:<br><br>${tableHtml}`;

    // 发送邮件
    MailApp.sendEmail({
      to: email,
      subject: subject,
      htmlBody: body
    });
    console.log(`已向${hubName}(${email})发送邮件`);
  }
}

// 辅助函数:把数据转成HTML表格
function generateHtmlTable(data, headers) {
  let html = "<table border='1' cellpadding='5' cellspacing='0'>";
  // 添加表头
  html += "<tr>";
  headers.forEach(header => {
    html += `<th style='background-color: #f0f0f0;'>${header}</th>`;
  });
  html += "</tr>";
  // 添加数据行
  data.forEach(row => {
    html += "<tr>";
    row.forEach(cell => {
      html += `<td>${cell}</td>`;
    });
    html += "</tr>";
  });
  html += "</table>";
  return html;
}

关键调整点

  • 替换代码中的表格名称:"主数据"和"Hub邮箱映射"改成你实际的表格名
  • 调整列索引:
    • 主数据里Sender字段的列索引:const sender = row[0],如果Sender在第3列就改成row[2](索引从0开始)
    • Hub邮箱映射表的列:obj[row[0]] = row[1],如果Hub名称在第2列,邮箱在第3列,就改成obj[row[1]] = row[2]
  • 邮件主题和内容可以根据需求修改

测试建议

  1. 先在代码里加console.log(groupedData),运行后查看日志确认分组是否正确
  2. 用MailApp.sendEmail的测试模式(或者先给自己发测试邮件)验证表格格式是否正常

内容的提问来源于stack exchange,提问作者user3500780

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 10:50:37