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

Google Apps Script发送谷歌表格PDF邮件附件失败代码排查

代码问题排查

核心故障原因

  • 调用MailApp.sendEmail()方法时,未传入已生成的PDF附件参数,附件不会被自动加入邮件
  • 发件条件判断语句末尾多加了英文分号;,导致条件判断完全失效,不管是否符合触发规则、是否已发送过邮件,都会执行后续发信逻辑

其他可优化问题

  • attachments变量未声明,属于隐式全局变量,可能引发运行时报错
  • 工作表获取后直接调用hideSheet(),如果工作表原本就是隐藏状态会抛出异常
  • 写死遍历4000行数据,实际数据量较小时会产生大量无效遍历,影响运行效率
  • 代码块嵌套逻辑错位,附件生成、发信逻辑的大括号位置错误
修正后可用代码
function sendPdfEmail() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName("HELPER");
  var startRow = 2; 
  // 动态获取实际最后一行数据,避免无效遍历
  var actualLastRow = sheet.getLastRow();
  var dataRange = sheet.getRange(startRow, 4, actualLastRow - startRow + 1, 7);
  var data = dataRange.getValues();
  
  for (var i = 0; i < data.length; ++i) {
    var row = data[i];
    var trigger = row[0];
    var emailAddress = row[2];
    if(emailAddress.trim() === "") continue; // 跳过空邮箱行
    
    var message = "Hi,\n\nSilahkan download dan print attachment ini.\n\nTerima Kasih,\nSistemHBR";
    var subject = "FORM CUTI";
    var status_email = row[6];
    
    // 移除if语句末尾的分号,将发信逻辑放到条件判断的代码块内
    if (trigger != 'FALSE' && status_email != 'EMAIL_SENT') {
      // 声明attachments变量
      var attachments = [ss.getAs(MimeType.PDF).setName("FORM CUTI")];
      // 传入附件参数
      MailApp.sendEmail(emailAddress, subject, message, {
        attachments: attachments
      });
      sheet.getRange(startRow + i, 7).setValue('EMAIL_SENT');
      SpreadsheetApp.flush();
    }
  }
  sheet.activate();
  // 处理完所有逻辑后再隐藏工作表,避免报错
  // sheet.hideSheet();
}

可选调整说明

如果需要仅导出HELPER单个工作表作为PDF,而非导出整个电子表格的所有工作表,可以替换附件生成逻辑为专用的单表导出代码即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 17:27:03