如何修改Google Apps Script脚本从第16行开始匹配查找?
修改后的脚本
function myFunction() { var lock = LockService.getDocumentLock(); lock.waitLock(20000); SpreadsheetApp.flush(); lock.releaseLock(); // 源表格 var sourceSpreadSheet = SpreadsheetApp.getActiveSpreadsheet(); var srcSheet = sourceSpreadSheet.getSheets()[0]; // 目标表格 var destinationSpreadSheet = SpreadsheetApp.openById('SheetID'); var destSheet = destinationSpreadSheet.getSheets()[0]; var values = srcSheet.getRange("B2:B3").getValues().reduce(function(a, b) { return a.concat(b); }); var partNum = values[0]; var row; // 从第16行开始查找A列的匹配项 var lastRow = destSheet.getLastRow(); if (lastRow >= 16) { // 仅获取第16行及以后的A列数据 var searchRangeValues = destSheet.getRange(16, 1, lastRow - 15, 1).getValues(); searchRangeValues.forEach(function(r, i) { if (r[0] === partNum) { // 计算实际行号:索引i对应第16行开始的偏移量 row = 16 + i; } }); } // 未找到匹配项则追加到表格末尾 row = row ? row : destSheet.getLastRow() + 1; var data = destSheet.getRange(row, 1, 1, 2).getValues()[0].map(function (el, ind){ return values[ind] ? values[ind] : el; }); var statusValue = srcSheet.getRange("B2").getValue(); if (statusValue != '') { destSheet.getRange(row, 1, 1, 2).setValues([data]); srcSheet.getRange("B2:B3").clearContent(); } }
关键修改说明
- 限定查找范围:原脚本遍历整个表格A列,现在改为仅从第16行开始查找,通过
destSheet.getRange(16, 1, lastRow - 15, 1)获取目标区域,完全避开前15行。 - 修正行号计算:遍历查找范围时,索引
i对应第16行的偏移量,实际行号用16 + i计算,确保匹配到的行都是16行及以后的内容。 - 边界处理:增加
if (lastRow >= 16)判断,若表格总行数不足16行,直接跳过查找逻辑,避免出现范围错误。 - 优化状态判断:将原脚本中取
B2:B3的值改为直接取B2的值,因为B2是搜索/添加的核心值,判断更准确。
内容的提问来源于stack exchange,提问作者Codedabbler
相关产品推荐
相关产品推荐

