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
相关产品推荐
相关产品推荐

