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
相关产品推荐
相关产品推荐

