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

如何编写Google Apps Script实现问卷匹配宠物数据的邮件推送

问题与解决方案

需求说明

用户完成Google表单问卷后,需根据填写的宠物偏好(物种为Dog、年龄为Adult或Kitten、性别为Male、体型为Small),从宠物数据集中筛选出状态为Adoptable的匹配宠物,统计匹配数量并将宠物的Name、Primary Color、Characteristics信息通过邮件发送给填写人。现有Google Apps Script代码无法实现该条件筛选逻辑,原代码如下:

function sendEmail() {
  var ss = SpreadsheetApp.getActiveSpreadsheet()


  // get sheets
  var response_sheet = ss.getSheetByName('survey_sheet');
  var score_sheet = ss.getSheetByName('pet_data');

  var Avals = response_sheet.getRange("A1:A").getValues();
  var Alast = Avals.filter(String).length;

  // get email address
  var emailAddress = response_sheet.getRange(Alast,2).getValue();
  
  // count value of matching data
  var count_pet = ()

  // create message
  var subject = "Adoptable Pet List"
  // greetings
  var message = "Hello, This is the adoptable pet list for you.\n\n There are count_pet are 
  available matching with your preference \n There are [Name], [Primary Color], 
  [Characteristics ]"
  var text = sheet.getRange(idx,2).getValue();
    
  message = message + text + '\n'
  // Send Email
  MailApp.sendEmail(emailAddress, subject, message);
}

修正后的代码

以下是实现完整筛选与邮件发送逻辑的代码:

function sendEmail() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();

  // 获取对应工作表
  var responseSheet = ss.getSheetByName('survey_sheet');
  var petDataSheet = ss.getSheetByName('pet_data');

  // 获取最新提交的问卷行
  var lastResponseRow = responseSheet.getLastRow();
  // 提取填写人邮箱及偏好信息(需确保列索引与实际问卷列一致)
  var emailAddress = responseSheet.getRange(lastResponseRow, 2).getValue();
  var preferredSpecies = responseSheet.getRange(lastResponseRow, 3).getValue();
  var preferredAge = responseSheet.getRange(lastResponseRow, 4).getValue();
  var preferredGender = responseSheet.getRange(lastResponseRow, 5).getValue();
  var preferredSize = responseSheet.getRange(lastResponseRow, 6).getValue();

  // 获取宠物数据集(首行为表头)
  var petData = petDataSheet.getDataRange().getValues();
  var header = petData[0];
  
  // 通过表头定位各字段的列索引
  var statusCol = header.indexOf('Status');
  var nameCol = header.indexOf('Name');
  var colorCol = header.indexOf('Primary Color');
  var characteristicsCol = header.indexOf('Characteristics');
  var speciesCol = header.indexOf('Species');
  var ageCol = header.indexOf('Age');
  var genderCol = header.indexOf('Gender');
  var sizeCol = header.indexOf('Size');

  // 筛选符合条件的可领养宠物
  var matchingPets = [];
  for (var i = 1; i < petData.length; i++) {
    var row = petData[i];
    var petStatus = row[statusCol];
    var petSpecies = row[speciesCol];
    var petAge = row[ageCol];
    var petGender = row[genderCol];
    var petSize = row[sizeCol];

    // 匹配条件:状态为Adoptable,且符合用户偏好
    if (petStatus === 'Adoptable' && 
        petSpecies === preferredSpecies && 
        (petAge === 'Adult' || petAge === 'Kitten') && 
        petGender === preferredGender && 
        petSize === preferredSize) {
      matchingPets.push({
        name: row[nameCol],
        color: row[colorCol],
        characteristics: row[characteristicsCol]
      });
    }
  }

  // 构建邮件内容
  var subject = "可领养宠物列表";
  var message = `您好,以下是为您筛选的可领养宠物列表:\n\n`;
  message += `符合您偏好的可领养宠物共有 ${matchingPets.length} 只\n\n`;

  if (matchingPets.length > 0) {
    message += "宠物详情:\n";
    matchingPets.forEach(pet => {
      message += `- 姓名:${pet.name},毛色:${pet.color},特征:${pet.characteristics}\n`;
    });
  } else {
    message += "暂无符合您偏好的可领养宠物";
  }

  // 发送邮件
  MailApp.sendEmail(emailAddress, subject, message);
}

关键改进点

  • 通过getLastRow()直接获取最新问卷行,替代原代码中手动计算的方式,更高效可靠
  • 利用表头定位字段列索引,避免硬编码列号,适配数据集结构变化
  • 实现完整的多条件筛选逻辑,包含状态判断和偏好匹配
  • 动态生成邮件内容,清晰展示匹配宠物信息,同时处理无匹配结果的情况
  • 变量命名更语义化,提升代码可读性

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 15:15:45