如何在Google AppScript中筛选含指定字符串的今日行并发送邮件?
问题解决:Google AppScript匹配今日行P列指定字符串
需求回顾
有一份按日期排序的客户名单,每行P列单元格包含混有价格的文本(如"DIFFICULT. $5 CUP. CALLING BACK")。需要编写AppScript:
- 遍历名单,检查行内日期是否为今日
- 若日期符合,检查P列是否包含"$5 Cup"或"$10 Cup"(忽略大小写)
- 满足双条件时,将客户姓名加入表格并发送邮件
已实现日期解析、表格生成和邮件发送,但今日行匹配P列指定字符串的逻辑失效。
修复后的完整脚本
function cupEmail() { // 表格获取 var master = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("2023 SALES"); var mData = master.getDataRange().getValues(); // 今日日期格式化(统一格式:月-日-年) var today = new Date(); var date = `${today.getMonth()+1}-${today.getDate()}-${today.getFullYear()}`; Logger.log(date); // 变量初始化 var gotCup = 0; // HTML表格初始化 var cupTable = '<div><table border="1px solid black" border-collapse="collapse" CELLSPACING=0 cellpadding="5"><tbody><tr><th style="font-weight:bold">序号</th><th style="font-weight:bold">客户姓名</th></tr>' // 遍历数据行(从第4行开始,对应数组索引3) for (var i = 3; i < mData.length; i++) { // 若预订日期为空,终止遍历 if (mData[i][0] === '') { break; } // 解析行内日期并格式化 var dateValue = mData[i][4]; if (!dateValue) continue; // 跳过无日期的行 var activeDate = new Date(dateValue); var formatted_Date = `${activeDate.getMonth() + 1}-${activeDate.getDate()}-${activeDate.getFullYear()}`; Logger.log(formatted_Date); // 检查日期是否为今日 if (formatted_Date === date) { // 获取P列内容(P是第16列,数组索引为15) var pColumnContent = mData[i][15] || ''; // 正则匹配$5 Cup或$10 Cup,忽略大小写 var cupRegex = /\$5 Cup|\$10 Cup/i; // 检查是否包含指定字符串 if (cupRegex.test(pColumnContent)) { var name = mData[i][1]; gotCup += 1; cupTable += `<tr><td>${gotCup}</td><td>${name}</td></tr>`; } } } // 完成表格并发送邮件 cupTable += '</tbody></table></div>' var header1 = `<div><h2>${gotCup} 位客户今日需要杯子:</h2></div>`; var body = `<div>${header1}${cupTable}</div>`; Logger.log(body); var emailAddress = 'email@email.com'; var message = body + '<p> 此邮件为自动发送。</p>'; var subject = '今日杯子需求'; MailApp.sendEmail(emailAddress, subject, message, {htmlBody: message}); }
关键修改说明
- 列索引修正:P列对应数组索引为15(A列是索引0),原脚本错误使用了12,已修正。
- 正则表达式优化:
$是正则特殊字符,需转义为\$才能匹配实际的美元符号- 添加
i标志忽略大小写,兼容"$5 CUP"、"$10 cup"等不同写法 - 使用
test()方法更高效地检查字符串是否匹配
- 语法错误修复:补全if语句括号,移除未定义的
findVal变量,直接使用P列单元格内容 - 健壮性提升:添加空值判断,避免无日期或P列空内容时的报错
内容的提问来源于stack exchange,提问作者gadokat
相关产品推荐
相关产品推荐

