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

Google Apps Script运行无报错但Gmail未收到邮件问题求助

问题根因

你遇到的邮件不发送问题,确实是你标注的判断逻辑及周边调用错误导致的,核心错误有4个:

  • getDisplayValues()返回值类型错误:该方法返回的是二维数组,对应你选中的Q2:Q整列多行结构,格式为[[Q2单元格值], [Q3单元格值], ...],你直接用数组和"On-going"/空字符串做全等比较,结果永远为false,if块永远不会执行,自然不会触发邮件发送。
  • 逻辑运算符优先级错误:&&的优先级高于||,你原有的判断写法实际执行逻辑为「只要Q列值等于On-going就进入判断,否则才校验Q列为空且T列≥80%」,和你预期的「(Q列为On-going 或 空)且 T列≥80%」逻辑完全不符。
  • 比较逻辑错误:你代码中写的>= "80%"是字符串按字符编码比较,不是数值比较,比如"9%"的字符串会被判定为大于"80%",结果完全不符合要求。
  • 缺少行遍历逻辑:你当前的判断是针对整列范围,没有逐行校验对应PO的状态和完成度,就算前面的问题修复,也无法对应到具体符合条件的PO行。

修正后完整代码

function sendEmail(){
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var spreadsheetURL = ss.getUrl(); 
  var SpreadsheetID = spreadsheetURL.split("/")[5]; 
  var filterViewName = 'PO_Log Precentage'; 
  var filterViewID = filterId(SpreadsheetID, filterViewName); 
  var url = createURL(spreadsheetURL, filterViewID); 
  var poSheet = ss.getSheetByName("Purchase Orders List");
  // 一次性取Q到T列所有有效值,减少接口调用次数
  var allRows = poSheet.getRange(2, 17, poSheet.getLastRow() -1, 4).getDisplayValues();
  var emailDataSheet = SpreadsheetApp.openByUrl("https://docs.google.com/spreadsheets/d/17G0QohHxjuAcZzwRtQ6AUW3aMTEvLnmTPs_USGcwvDA/edit#gid=1242890521").getSheetByName("TestA"); 
  var emailData = emailDataSheet.getRange("A2:G").getDisplayValues();
  var po_numID = poSheet.getRange("A2").getDisplayValue().substr(0,3);
  var subject = po_numID + " Po Log Daily Notification "; 
  var options = {
    htmlBody: "Hi All, 以下<a href=\"" +url+ "\">采购订单</a>已消耗超过80%预算"
  };

  // 逐行校验条件
  allRows.forEach(row => {
    let status = row[0]; // 取当前行Q列值
    let rateStr = row[3]; // 取当前行T列值,去掉%转为数值
    let rate = parseInt(rateStr.replace("%","")) || 0;
    // 加括号控制逻辑优先级,修正判断条件
    if((status === "On-going" || status === "") && rate >= 80){
      // 匹配对应收件人
      emailData.forEach(dataRow => {
        if(dataRow[0].substr(0,3) === po_numID){
          let email = dataRow[6];
          if(email) MailApp.sendEmail(email, subject, '', options);
        }
      })
    }
  })
}

验证建议

修改后可以先在判断逻辑前加Logger.log()打印变量实际值,确认取值符合预期后再执行,同时注意检查脚本的Gmail发送权限是否已经授权。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 00:27:05