Google Sheets App Script If Else判断成立仍执行Else分支问题求助
问题描述
Test1 工作表

Test2 工作表

需求:将Test1工作表A列的News01与Test2工作表A列的值做比对,提取Test2对应行的B列值,预期结果是将Finance写入Test1工作表B列对应单元格。
运行异常:即便If判断语句的条件成立,代码仍会执行Else分支的逻辑;删除Else分支后,If语句可正常运行。
相关代码:
function test() { var sheet = SpreadsheetApp.getActiveSpreadsheet(); var source_sheet = sheet.getSheetByName("Test1"); var target_sheet = sheet.getSheetByName("Test2"); var lastRow = source_sheet.getLastRow(); var inputs = source_sheet.getRange('A' + lastRow).getValues().flat(); var days = target_sheet.getRange('A1:A').getValues().flat(); var codes = target_sheet.getRange('B1:B').getValues().flat(); inputs.forEach(function(input, count){ for(var i = 0; i < days.length; i++){ if(days[i].trim() == input.trim()){ source_sheet.getRange('B' + (count + source_sheet.getLastRow())).setValue(codes[i]); Logger.log(codes[i]); break; } else{ Logger.log("News not found") } } }); }
问题原因
你将else分支写在了for循环内部,循环遍历Test2的A列过程中,只要当前遍历到的行不匹配,就会触发一次else分支执行日志打印逻辑,哪怕后续遍历到了匹配的行,前面不匹配的遍历轮次已经执行过else逻辑,才会出现你以为条件成立还触发else的错觉。
修复方案
把else分支移到for循环外部,新增匹配标记判断是否找到对应内容即可,修改后代码如下:
function test() { var sheet = SpreadsheetApp.getActiveSpreadsheet(); var source_sheet = sheet.getSheetByName("Test1"); var target_sheet = sheet.getSheetByName("Test2"); var lastRow = source_sheet.getLastRow(); var inputs = source_sheet.getRange('A' + lastRow).getValues().flat(); var days = target_sheet.getRange('A1:A').getValues().flat(); var codes = target_sheet.getRange('B1:B').getValues().flat(); inputs.forEach(function(input, count){ let isFound = false; for(var i = 0; i < days.length; i++){ if(days[i].trim() == input.trim()){ source_sheet.getRange('B' + (count + source_sheet.getLastRow())).setValue(codes[i]); Logger.log(codes[i]); isFound = true; break; } } if(!isFound){ Logger.log("News not found") } }); }
内容的提问来源于stack exchange,提问作者Moses
相关产品推荐
相关产品推荐

