Google Sheets AppScript:如何为A列范围返回最高匹配字符数
处理A列范围与N列的最长连续匹配字符数
以下是修改后的代码,实现处理A1:A1000范围,计算每个A列单元格在N列中能找到的最长连续匹配字符数,并将结果写入对应行的S列:
function countMaxCommonCharactersInOrder() { var sheet = SpreadsheetApp.getActiveSheet(); // 读取A1:A1000的所有数据 var dataA = sheet.getRange("A1:A1000").getValues(); // 读取N列所有数据 var dataN = sheet.getRange("N:N").getValues(); // 遍历A列每个单元格 for (var aRow = 0; aRow < dataA.length; aRow++) { var searchString = dataA[aRow][0].toString(); var maxCount = 0; // 存储当前A单元格对应的最长连续匹配长度 // 遍历N列每个单元格,比对并更新最大值 for (var nRow = 0; nRow < dataN.length; nRow++) { var text = dataN[nRow][0].toString(); var currentCount = getLongestCommonSequenceLength(searchString, text); if (currentCount > maxCount) { maxCount = currentCount; } } // 将结果写入对应行的S列(第19列) sheet.getRange(aRow + 1, 19).setValue(maxCount); } } function getLongestCommonSequenceLength(str1, str2) { var maxLength = 0; var currentLength = 0; var str2Pointer = 0; for (var i = 0; i < str1.length; i++) { var matched = false; while (str2Pointer < str2.length) { if (str1[i] === str2[str2Pointer]) { currentLength++; str2Pointer++; matched = true; break; } else { // 不匹配时更新最长长度并重置当前计数 if (currentLength > maxLength) { maxLength = currentLength; } currentLength = 0; str2Pointer++; } } // 每次循环后检查当前长度是否为最长 if (currentLength > maxLength) { maxLength = currentLength; } // N列字符串遍历完则提前退出 if (str2Pointer >= str2.length) { break; } } // 最后确认一次最长长度 return currentLength > maxLength ? currentLength : maxLength; }
关键修改说明
- 范围处理:替换原代码单个单元格读取逻辑,改为读取A1:A1000整列数据并遍历每一行
- 最大值记录:新增
maxCount变量,跟踪当前A列单元格在N列所有内容中找到的最长连续匹配长度 - 匹配逻辑修正:重写匹配函数,从原累加长度>2的序列改为直接返回最长连续匹配序列的长度,贴合你“返回最高匹配字符数”的需求
- 结果对应写入:每个A列单元格的结果写入对应行的S列,保持行号一一对应
内容的提问来源于stack exchange,提问作者Dan
相关产品推荐
相关产品推荐

