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

如何遍历表格列,仅当状态为未发送时执行邮件发送?

问题解决:仅当状态未发送时发送邮件

你的代码存在几个关键问题导致状态判断失效,同时会重复发送邮件,以下是修正方案:

核心错误点

  • 状态列索引错误:status是单列范围(F列),getValues()返回的二维数组中每个row只有1个元素,你用row[6]会取到undefined,永远不等于"SENT",导致所有循环都执行发送。
  • 邮箱未对应每行数据:你只获取了第2行的邮箱,循环中一直用这个固定邮箱发送,没有匹配每行的收件人。
  • 数据获取效率低:单独取状态列不如一次性获取所有需要的列(邮箱、状态),减少Spreadsheet API调用。

修正后的完整代码

function emailPDF(pdf) {
  // 移除无用的调用
  // DocumentApp.getActiveDocument();
  // DriveApp.getFiles();

  const ss = SpreadsheetApp.openByUrl("url");
  const responseTab = ss.getSheetByName("Form responses 1");
  const lastRow = responseTab.getLastRow();
  
  // 一次性获取需要的列:B列(邮箱)、F列(状态),从第2行到最后一行
  const data = responseTab.getRange(2, 2, lastRow - 1, 5).getValues(); // 范围是B2:F,共5列(B到F)

  const subject = 'Year Rota';
  const body = "ROTA";

  const url = 'url';
  const exportOptions =
    'exportFormat=pdf&format=pdf' +
    '&size=letter' +
    '&portrait=false' +
    '&fitw=true' +
    '&sheetnames=false&printtitle=false' +
    '&pagenumbers=false&gridlines=false' +
    '&fzr=false' +
    '&gid=1897395809';
  
  const params = {method:"GET",headers:{"authorization":"Bearer "+ ScriptApp.getOAuthToken()}};
  const pdfBlob = UrlFetchApp.fetch(url+exportOptions, params).getBlob();

  data.forEach((row, index) => {
    const email = row[0] || ''; // B列是第1个元素(索引0)
    const status = row[4] || ''; // F列是B到F的第5个元素(索引4)
    
    // 仅当状态不是"SENT"且邮箱不为空时发送
    if (status !== "SENT" && email) {
      GmailApp.sendEmail(email, subject, body, {
        htmlBody: body,
        attachments: [{
          fileName: "ROTA.pdf",
          content: pdfBlob.getBytes(),
          mimeType: "application/pdf"
        }]
      });
      // 更新对应行的状态为"SENT",F列是第6列(索引5,因为从1开始)
      responseTab.getRange(index + 2, 6).setValue('SENT');
    }
  });
}

关键修改说明

  1. 修正状态索引:row[4]对应F列(因为我们取的是B到F的范围,F是第5列,索引从0开始)。
  2. 每行匹配邮箱:从data数组中获取当前行的邮箱,确保每个收件人对应自己的状态。
  3. 增加邮箱非空判断:避免向空邮箱发送邮件。
  4. 移除无用代码:删除DocumentApp.getActiveDocument()和DriveApp.getFiles()这类无意义的调用。
  5. 变量命名优化:将response改为pdfBlob,更清晰表达变量用途。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 18:52:46