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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 08:07:53