Google Sheets脚本调用getLastRow动态获取行数批量发邮件求助
解决方案
你只需要通过getLastRow()获取工作表最后一行有内容的行号,即可动态计算需要处理的有效行数,同时原代码存在读取范围列数不匹配的问题也需要同步修正,否则无法正常读取邮件内容列。
修改后的完整代码如下:
/** * Sends emails with data from the current spreadsheet. */ function sendEmails() { var ss = SpreadsheetApp.openById("ID"); var current = ss.getSheetByName("Sheet"); var startRow = 4; // First row of data to process // 动态计算有效行数:最后一行内容行号减去起始行号+1 var lastRow = current.getLastRow(); var numRows = lastRow - startRow + 1; // 无有效数据时直接退出,避免报错 if (numRows < 1) return; // 修正范围列数为2,匹配需要读取的邮箱、邮件内容两列 var dataRange = current.getRange(startRow, 1, numRows, 2); // Fetch values for each row in the Range. var data = dataRange.getValues(); for (i in data) { var row = data[i]; var emailAddress = row[0]; // First column var message = row[1]; // Second column var subject = 'Stock values end of month'; MailApp.sendEmail(emailAddress, subject, message); } }
核心修改点
- 调用
current.getLastRow()获取当前工作表最后一个包含内容的行号,动态计算需要处理的行数,无需手动修改 - 修正
getRange的最后一个参数为2,原参数1仅读取A列,无法获取B列的邮件内容,会导致发送邮件失败 - 新增无有效数据的判断逻辑,当工作表没有待处理内容时直接终止运行,避免抛出异常
内容的提问来源于stack exchange,提问作者Support Bot
相关产品推荐
相关产品推荐

