Apps Script两数组字符串匹配及赋值功能实现问题
Apps Script 商品-库位匹配实现方案
首先修正原有代码的基础错误:
- 原代码中定义Locations工作表的变量名为
locss,后续读取范围时错误引用了不存在的locationssheet变量,行号变量lastlocRow也误写为lastlocationRow,已在下方代码中修正 - 原代码仅读取了工作表数据到数组,未在匹配完成后将结果写回表格,已补充批量写回逻辑提升运行效率
匹配逻辑实现规则
严格按照需求优先级实现匹配流程:
- 优先遍历所有库位做主属性精确匹配,匹配成功则将商品ID写入对应库位,直接终止当前商品的匹配流程
- 主属性全量遍历无匹配时,从头遍历所有库位做次级属性子串匹配,匹配成功同样写入ID后终止流程
- 两轮匹配均无结果时,直接跳过当前商品处理下一条
- 已分配ID的库位默认不参与后续匹配,若需要覆盖分配可删除代码中对应判断行
核心语法说明
- 精确字符串判断:使用
===严格相等比较,提前对两边值做String()类型转换、trim()去首尾空格,避免单元格格式为数字、存在不可见空格导致匹配失效 - 子串判断:使用原生
String.includes()方法,直接返回布尔值表示目标属性是否为次级属性字符串的子串 - 匹配标记位:用布尔变量
matchSuccess记录当前商品是否匹配成功,控制是否进入第二轮子串匹配,同时匹配成功后通过break及时终止循环减少无效遍历
完整可运行代码
function matchcodes() { const activeSs = SpreadsheetApp.getActiveSpreadsheet(); // 读取库位表数据 const locSheet = activeSs.getSheetByName('Locations'); const lastLocRow = locSheet.getLastRow(); // 库位数据从第2行开始读取,对应A到D列 const locations = locSheet.getRange("A2:D" + lastLocRow).getValues(); // 读取新商品表数据 const itemSheet = activeSs.getSheetByName('New Items'); const lastItemRow = itemSheet.getLastRow(); const itemcodes = itemSheet.getRange("A1:B" + lastItemRow).getValues(); // 逐商品匹配 for (let i = 0; i < itemcodes.length; i++) { const targetAttr = String(itemcodes[i][0]).trim(); const targetItemId = itemcodes[i][1]; let matchSuccess = false; // 第一轮:主属性精确匹配 for (let j = 0; j < locations.length; j++) { // 跳过已有ID的库位,不需要可删除 if (locations[j][1]) continue; const mainAttr = String(locations[j][2]).trim(); if (targetAttr === mainAttr) { locations[j][1] = targetItemId; matchSuccess = true; break; } } // 第一轮未匹配,进入第二轮子串匹配 if (!matchSuccess) { for (let j = 0; j < locations.length; j++) { if (locations[j][1]) continue; const subAttr = String(locations[j][3]).trim(); if (subAttr.includes(targetAttr)) { locations[j][1] = targetItemId; matchSuccess = true; break; } } } } // 将匹配结果批量写回库位表的B列(商品ID列) const writeValues = locations.map(row => [row[1]]); locSheet.getRange(2, 2, writeValues.length, 1).setValues(writeValues); }
代码采用批量读、批量写的方式操作表格,比逐单元格读写速度快数倍,适合数据量较大的场景。
内容的提问来源于stack exchange,提问作者Nick Eddy
相关产品推荐
相关产品推荐

