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

谷歌表格脚本求助:录入完成日期发管理员邮件后自动删除对应行

修改后的完整脚本

function processCompletedQuotes() {
  var ActiveSheet = SpreadsheetApp.getActive().getSheetByName('Quoting');
  var StartRow = 2;
  var lastRow = ActiveSheet.getLastRow();
  // 完成日期录入列的索引,列号从0开始计数,假设你把完成日期放在第9列(表格显示的第9列,对应索引8),位置不对可自行调整
  var COMPLETION_DATE_COL = 8;
  // 替换为实际的管理员收件邮箱
  var ADMIN_MAIL = "admin@example.com";

  // 改用倒序循环,避免删行后行号偏移导致删错数据
  for (var i = lastRow; i >= StartRow; i--) {
    var CurrentRow = ActiveSheet.getRange(i, 1, 1, 11).getValues()[0];
    var completionDate = CurrentRow[COMPLETION_DATE_COL];
    var emailStatus = CurrentRow[7];

    // 判断逻辑:完成日期不为空、且未发送过完成通知才处理
    if (!completionDate || /^Completion Email sent/.test(emailStatus)) {
      continue;
    }

    var endDate = Utilities.formatDate(new Date(), "GMT+1", "dd/MM/yyyy");
    var message = "该报价项目已完成:" +
      "<p><b>项目编号:</b>" + CurrentRow[1] + "</p>" +
      "<p><b>建造商:</b>" + CurrentRow[2] + "</p>" +
      "<p><b>报价人:</b>" + CurrentRow[3] + "</p>" +
      "<p><b>截止日期:</b>" + CurrentRow[4] + "</p>" +
      "<p><b>备注:</b>" + CurrentRow[5] + "</p>";
    var Subject = "报价项目已完成";

    // 先给管理员发通知邮件
    MailApp.sendEmail(ADMIN_MAIL, Subject, message, {
      htmlBody: message
    });

    // 标记发送状态
    ActiveSheet.getRange(i, 8).setValue("Completion Email sent " + endDate);
    // 删除当前行
    ActiveSheet.deleteRow(i);
  }
}

核心调整说明

  • 遍历逻辑改为倒序:从表格最后一行向上遍历,删除行后不会影响未处理行的行号,彻底避免删错数据的问题
  • 新增完成日期判断:默认假设完成日期录入在表格第9列(对应索引8),如果你的完成日期放在其他列,修改COMPLETION_DATE_COL的数值即可(索引=表格列号-1)
  • 优化发送状态校验:只要状态列已有发送标记就自动跳过,不会重复发邮件
  • 补充删行逻辑:邮件发送成功后直接删除当前处理行

使用提示

  • 替换代码中的admin@example.com为实际管理员收件邮箱
  • 可在脚本编辑器的「触发器」页面新增自动触发规则,选择processCompletedQuotes函数,触发条件设置为「电子表格变更时」,这样只要有人录入完成日期就会自动执行对应逻辑
  • 首次运行需要按照提示授权脚本的表格编辑、邮件发送权限

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 21:39:04