You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Google Sheets脚本优化:标题中关键词匹配与批量编码赋值

实现Google Sheets标题含关键词自动匹配编码

问题分析

原脚本使用严格相等===判断,仅能匹配单元格内容完全一致的情况,无法满足"标题包含目标词即匹配"的需求。我们可以通过两种方式修改:


方案1:使用字符串包含判断(简单直接)

适合不需要复杂匹配规则(如全词匹配、大小写忽略)的场景,直接用String.includes()判断标题是否包含目标词:

修改后代码

function assignValues() {
    var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
    // 仅获取有数据的行,避免空行循环浪费性能
    var lastRowA = sheet.getLastRow();
    var rangeA = sheet.getRange(1, 1, lastRowA, 1).getValues(); 
    var rangeB = sheet.getRange(1, 2, lastRowA, 1).getValues(); 
    var lastRowC = sheet.getRange("C:C").getValues().filter(String).length;
    var rangeC = sheet.getRange(1, 3, lastRowC, 1).getValues(); 
    var rangeD = [];

    for (var i = 0; i < rangeC.length; i++) {
        var valueC = rangeC[i][0];
        var foundCode = "";

        // 遍历所有目标词
        for (var j = 0; j < rangeA.length; j++) {
            var targetWord = rangeA[j][0];
            // 跳过空的目标词,同时判断标题是否包含目标词
            if (targetWord && valueC && valueC.includes(targetWord)) {
                foundCode = rangeB[j][0];
                break; // 找到第一个匹配就停止,若要匹配多个可去掉break
            }
        }
        rangeD.push([foundCode]);
    }

    // 将结果写入D列,从第1行开始
    sheet.getRange(1, 4, rangeD.length, 1).setValues(rangeD);
}

关键修改点

  • 替换原严格相等判断为valueC.includes(targetWord),实现包含匹配
  • 增加对空单元格的判断(targetWord && valueC),避免空值导致的错误
  • 优化范围获取,仅读取有数据的行,提升脚本运行效率

方案2:使用正则表达式(支持复杂匹配规则)

如果需要更灵活的匹配规则(如全词匹配、忽略大小写),可以用正则表达式:

修改后代码(以忽略大小写+全词匹配为例)

function assignValuesWithRegex() {
    var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
    var lastRowA = sheet.getLastRow();
    var rangeA = sheet.getRange(1, 1, lastRowA, 1).getValues(); 
    var rangeB = sheet.getRange(1, 2, lastRowA, 1).getValues(); 
    var lastRowC = sheet.getRange("C:C").getValues().filter(String).length;
    var rangeC = sheet.getRange(1, 3, lastRowC, 1).getValues(); 
    var rangeD = [];

    for (var i = 0; i < rangeC.length; i++) {
        var valueC = rangeC[i][0];
        var foundCode = "";

        for (var j = 0; j < rangeA.length; j++) {
            var targetWord = rangeA[j][0];
            if (targetWord && valueC) {
                // 创建正则:\b表示单词边界,i表示忽略大小写
                var regex = new RegExp(`\\b${targetWord}\\b`, 'i');
                if (regex.test(valueC)) {
                    foundCode = rangeB[j][0];
                    break;
                }
            }
        }
        rangeD.push([foundCode]);
    }

    sheet.getRange(1, 4, rangeD.length, 1).setValues(rangeD);
}

正则规则说明

  • \\b:匹配单词边界,避免部分匹配(比如目标词"apple"不会匹配"applesauce")
  • i:忽略大小写,目标词"Apple"可以匹配标题里的"apple"或"APPLE"
  • 若不需要全词匹配,去掉\\b即可;若需要区分大小写,去掉'i'参数

额外说明

  • 如果需要匹配多个关键词并返回所有对应编码,可以去掉循环里的break,并将编码用逗号拼接(如foundCode += rangeB[j][0] + ",";),最后再处理掉末尾的逗号
  • 脚本运行前建议先备份数据,避免意外覆盖

内容的提问来源于stack exchange,提问作者Eastland

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 03:58:08