Google App Script需求:表格为空时禁止发送邮件
解决空表格时不发送邮件的问题
核心思路
在发送邮件前添加判断逻辑,确认表格包含有效内容,只有满足条件时才执行邮件发送操作。
修改后的完整脚本
function sendmail() { var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Email2"); // 检查指定工作表是否存在 if (!sheet) { console.log("工作表Email2不存在"); return; } var bodyEmail = "Email body"; var totalRows = sheet.getLastRow(); var totalCols = sheet.getLastColumn(); // 判断表格是否为空:完全无内容,或仅有的一行表头全为空 var isEmpty = false; if (totalRows === 0) { isEmpty = true; } else if (totalRows === 1) { var headerValues = sheet.getRange(1, 1, 1, totalCols).getDisplayValues()[0]; isEmpty = headerValues.every(val => val.trim() === ""); } // 表格为空则终止脚本 if (isEmpty) { console.log("表格为空,不发送邮件"); return; } // 生成HTML表格内容 var table = "<html><body><br><table border=1>"; var colVal = ""; for (var rowNo = 1; rowNo <= totalRows; rowNo++) { table += "<tr>"; for (var colNo = 1; colNo <= totalCols; colNo++) { colVal = sheet.getRange(rowNo, colNo).getDisplayValue(); table += rowNo === 1 ? `<th>${colVal}</th>` : `<td>${colVal}</td>`; } table += "</tr>"; } table += "</table></body></html>"; // 补充HTML闭合标签,修复原脚本的显示问题 bodyEmail += table; // 处理邮件标题和收件人 const currentMonth = Utilities.formatDate(new Date(), "GMT+4", "MMMM "); var year = new Date().getFullYear(); var emails = ["email@gmail.com","email2@gmail.com"]; // 批量发送邮件 emails.forEach(email => { GmailApp.sendEmail(email, `Title of email ${currentMonth}${year}`, "", {htmlBody: bodyEmail}); }); }
关键修改说明
- 工作表存在性校验:避免因工作表名称错误导致脚本报错终止。
- 空表格判断逻辑:
- 当表格无任何行(
totalRows === 0)时,直接判定为空; - 当表格只有一行时,检查该行所有单元格是否为空,排除无效表头的情况;
满足任一条件则跳过邮件发送。
- 当表格无任何行(
- HTML结构修复:补充原脚本缺失的
</table></body></html>标签,避免邮件显示异常。 - 代码细节优化:修正原脚本中“emial”的拼写错误,改用
forEach简化收件人循环,提升代码可读性。
自定义逻辑调整
如果你的需求是「只要有表头(哪怕无数据行)就发送邮件」,只需将空判断逻辑简化为:
if (totalRows === 0) { console.log("表格为空,不发送邮件"); return; }
内容的提问来源于stack exchange,提问作者RyuukuS
相关产品推荐
相关产品推荐

