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

Google表单抽奖脚本异常:3票选项条目生成错误求助

问题描述

我通过Google表单开展慈善抽奖活动,设置了两个选项:

  • 1张抽奖券 - 20美元
  • 3张抽奖券 - 50美元

需求目标:用户选择「3张抽奖券」提交表单时,Google Sheet中生成3条对应记录;选择「1张抽奖券」时生成1条记录。

我尝试用AI生成Apps Script但未达到预期效果,当前使用的脚本如下:

function onFormSubmit(e) {
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  var lastRow = sheet.getLastRow();
  var values = sheet.getRange(lastRow, 1, 1, sheet.getLastColumn()).getValues()[0];
  
  var ticketChoice = values[4]; // 假设票种选择在E列
  
  if (ticketChoice.includes("3 Raffle Tickets")) {
    // 为3张抽奖券额外添加两行记录
    for (var i = 0; i < 2; i++) {
      sheet.appendRow(values);
    }
  }
  // 选择1张抽奖券时不做额外操作,表单已自动添加一条记录
}

触发器配置详情:

  • 运行函数:onFormSubmit
  • 部署版本:Head
  • 事件来源:From spreadsheet
  • 事件类型:On form submit

测试中发现的问题:选择「3张抽奖券」时看似正常,但选择「1张抽奖券」提交后,除了新增1条对应记录,还会额外生成2条之前选择3票时的旧记录。我并非脚本专业人员,急需解决该问题以按时启动抽奖活动。

预期效果:选择3张票时Sheet新增3条记录,选择1张票时新增1条记录,支持用户多次提交表单。


已解决:可用脚本
function onFormSubmit(e) {
  try {
    var sheet = e.range.getSheet();
    var ticketColumnIndex = 5;  // E列对应索引为5
    
    var ticketOption = e.values[ticketColumnIndex - 1].trim();
    Logger.log("从目标列获取的值: " + ticketOption);
    
    var numTickets = parseInt(ticketOption.match(/\d+/)[0], 10);
    Logger.log("抽奖券数量: " + numTickets);
    
    var lastRow = sheet.getLastRow();
    var rowData = e.values;
    
    // 先将当前提交的记录添加到表格末尾
    sheet.getRange(lastRow + 1, 1, 1, rowData.length).setValues([rowData]);
    
    // 若选择多张票,添加额外的对应记录
    if (numTickets > 1) {
      for (var i = 1; i < numTickets; i++) {
        lastRow = sheet.getLastRow();
        sheet.getRange(lastRow + 1, 1, 1, rowData.length).setValues([rowData]);
      }
      Logger.log("记录已成功复制 " + (numTickets - 1) + " 次,所有记录已分组在表格末尾。");
    } else {
      Logger.log("单张抽奖券记录已添加到表格末尾。");
    }
    
    // 删除表单自动添加的原始记录
    sheet.deleteRow(e.range.getRow());
    
    // 删除A列中以"No Match"开头的无效行
    var dataRange = sheet.getDataRange();
    var values = dataRange.getValues();
    for (var i = values.length - 1; i >= 0; i--) {
      if (values[i][0].toString().startsWith("No Match")) {
        sheet.deleteRow(i + 1);
      }
    }
    
  } catch (error) {
    Logger.log("表单提交处理过程中出现错误: " + error);
  }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 07:02:03