Google Apps Script仅匹配表单响应最后一行查找索引对应值
问题根源
原代码读取了「Form Responses」工作表I列从第3行到末行的全部姓名数据,匹配逻辑是找出「Match」表中所有在这整列姓名里存在的记录,因此会输出全量历史提交对应的匹配结果,没有单独提取最新一次提交(最后一行)的姓名做单条匹配。
修正后可直接运行的代码
function findLocation() { const ss = SpreadsheetApp.getActive(); const formRespSheet = ss.getSheetByName('Form Responses'); // 直接取最后一行I列(第9列)的最新提交姓名,无需拉取整列历史数据 const latestName = formRespSheet.getRange(formRespSheet.getLastRow(), 9).getValue(); const matchSheet = ss.getSheetByName('Match'); const matchTableData = matchSheet.getRange(`A2:C${matchSheet.getLastRow()}`).getValues(); // 仅查找和最新提交姓名完全匹配的单条记录 const matchedRow = matchTableData.find(row => row[0] === latestName); if (matchedRow) { const [, location, email] = matchedRow; Logger.log(`匹配位置:${JSON.stringify(location)}`); Logger.log(`匹配邮箱:${JSON.stringify(email)}`); } else { Logger.log(`未查询到姓名「${latestName}」对应的位置、邮箱信息`); } }
核心改动说明
- 删除原逻辑中拉取I列所有历史提交姓名的代码,直接定位到表单响应表最后一行的姓名单元格,精准获取最新提交的姓名值
- 将原批量过滤全量匹配项的
filter+遍历输出逻辑,替换为find方法只查询和最新姓名匹配的单条记录,不会输出历史提交的匹配结果 - 增加无匹配场景的日志提示,避免匹配失败时出现空值报错
内容的提问来源于stack exchange,提问作者Jon Beckner
相关产品推荐
相关产品推荐

