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

如何通过表格单元格控制时间驱动触发器的鸡蛋订单邮件发送?

当然可以通过表格控制脚本执行,同时也有更高效的部署方案,以下是具体实现方式:


一、表格控制脚本执行的实现

1. 表格配置方案

在对应摊位的工作表(比如NanaNick)中添加控制项,二选一即可:

  • 复选框方案:在固定单元格(如C9,表头行下方)插入复选框,勾选时触发本周停止订单的逻辑。
  • 文本标记方案:在固定单元格(如C9)输入STOP(不区分大小写),触发停止逻辑。

2. 核心逻辑修改

在原脚本开头加入控制判断,根据单元格值分支处理:

  • 若触发停止条件:发送内容为「本周[摊位名]无需鸡蛋」的邮件,或直接跳过发送(按需选择)。
  • 若未触发:正常发送订单表格邮件。

注意:原脚本中if(i=0)是赋值操作,需修正为if(i === 0)(严格相等判断),避免表头渲染错误。


二、更优部署方式

1. 统一配置表管理多摊位

创建名为配置表的工作表,集中管理所有摊位的核心信息,避免重复编写函数:

摊位名称收件邮箱BCC邮箱订单数据范围控制单元格发送星期(1=周一,7=周日)
NanaNickMrEggman@HenHousefarm.comnananick@shopstall.comA10:B17C92(周二)
AppleAndyxxx@xxx.comxxx@xxx.comA10:B15C93(周三)

2. 单触发器驱动全局逻辑

设置每周一次的时间驱动触发器(比如每周日晚),让函数自动判断当天星期几,匹配配置表中的发送规则,批量处理对应摊位。

3. 加入日志记录

通过Logger.log()记录每次执行状态(如「已发送NanaNick订单邮件」「已跳过AppleAndy:本周停止」),方便后续排查问题。

4. 使用安装型触发器

替换简单触发器为安装型触发器,确保脚本拥有稳定的邮件发送权限,避免手动/自动运行的权限差异导致报错。


三、修改后的完整脚本示例

function sendEggOrders() {
  var ss = SpreadsheetApp.getActive();
  // 读取配置表数据
  var configSheet = ss.getSheetByName("配置表");
  var configData = configSheet.getRange(2, 1, configSheet.getLastRow()-1, 6).getValues();
  
  // 转换当前星期为数字(1=周一,7=周日)
  var currentDay = new Date().getDay();
  currentDay = currentDay === 0 ? 7 : currentDay;

  configData.forEach(function(config) {
    var stallName = config[0];
    var toEmail = config[1];
    var bccEmail = config[2];
    var orderRange = config[3];
    var controlCell = config[4];
    var sendDay = config[5];

    // 跳过非当天发送的摊位
    if (sendDay !== currentDay) return;

    var stallSheet = ss.getSheetByName(stallName);
    if (!stallSheet) {
      Logger.log(`错误:未找到摊位工作表 ${stallName}`);
      return;
    }

    // 读取控制单元格值,兼容复选框(TRUE)和文本STOP
    var controlValue = stallSheet.getRange(controlCell).getValue().toString().trim().toUpperCase();
    var isStop = controlValue === "TRUE" || controlValue === "STOP";

    var emailSubj = `Egg Order to ${stallName} ${Utilities.formatDate(new Date(), "GMT+1:00", "dd.MM.yyyy")}`;
    var htmlBody;

    if (isStop) {
      // 生成停止订单邮件内容
      htmlBody = `Hi Mr Eggman:<br><br>本周${stallName}无需鸡蛋`;
      Logger.log(`已发送停止订单邮件:${stallName}`);
    } else {
      // 生成正常订单表格
      var orderValues = stallSheet.getRange(orderRange).getValues();
      htmlBody = '<style>td,th{border:1px solid black;}</style><table>';
      orderValues.forEach(function(row, idx) {
        htmlBody += '<tr>';
        row.forEach(function(cell) {
          htmlBody += idx === 0 
            ? Utilities.formatString('<th>%s</th>', cell) 
            : Utilities.formatString('<td>%s</td>', cell);
        });
        htmlBody += '</tr>';
      });
      htmlBody += '</table>';
      htmlBody = `Hi Mr Eggman:<br><br><br>${htmlBody}`;
      Logger.log(`已发送正常订单邮件:${stallName}`);
    }

    // 发送邮件
    MailApp.sendEmail({
      to: toEmail,
      subject: emailSubj,
      htmlBody: htmlBody,
      bcc: bccEmail
    });
  });
}

四、设置步骤

  1. 在Google Sheets中创建配置表,按上述格式填写所有摊位信息。
  2. 在每个摊位工作表的指定控制单元格添加复选框或输入STOP文本。
  3. 打开脚本编辑器,替换原脚本为上述代码。
  4. 创建安装型触发器:
    • 点击编辑器菜单「编辑」→「当前项目的触发器」。
    • 点击「添加触发器」,设置:
      • 函数选择:sendEggOrders
      • 事件源:「时间驱动」
      • 时间类型:「周计时器」
      • 选择星期和时间(比如每周日23:00,确保周日数据已填写完成)

内容的提问来源于stack exchange,提问作者Nick Austin

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 02:35:11