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

Google Sheets自动搜索多关键词并标记X的脚本开发求助

Google Sheets 自动关键词匹配实现方案

需求说明

遍历Sheet1的C列城市描述内容,匹配E1单元格中以逗号分隔的关键词(支持单个词、多词或复合词),若描述中包含任意关键词,则在对应行的D列标记“X”。

原脚本问题修正

你提供的脚本存在几处语法和逻辑缺失问题:

  • 工作表获取语法错误:正确写法应为SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet1")
  • 变量名拼写错误:letKeyWords 应为 let keyWords
  • 缺少核心匹配逻辑:未实现读取描述、关键词匹配、写入结果的代码
  • 硬编码行数:固定20行范围不够灵活,建议动态获取数据行

完整实现脚本

function performMatch() {
  // 获取目标工作表,不存在则直接退出
  const dataTab = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet1");
  if (!dataTab) return;

  // 提取并处理E1中的关键词列表,去除空格和空值
  const keyWords = dataTab.getRange(1, 5).getValue().split(",").map(word => word.trim());
  const validKeywords = keyWords.filter(word => word.length > 0);
  if (validKeywords.length === 0) return;

  // 动态获取C列有效数据范围(从第2行开始)
  const lastRow = dataTab.getLastRow();
  if (lastRow < 2) return;
  const descriptions = dataTab.getRange(2, 3, lastRow - 1, 1).getValues();

  // 批量处理匹配逻辑
  const results = descriptions.map(row => {
    const desc = row[0] || "";
    // 不区分大小写匹配任意关键词
    const isMatch = validKeywords.some(keyword => desc.toLowerCase().includes(keyword.toLowerCase()));
    return isMatch ? ["X"] : [""];
  });

  // 批量写入D列结果
  dataTab.getRange(2, 4, results.length, 1).setValues(results);
}

关键细节说明

  • 动态数据范围:使用getLastRow()自动获取最后一行数据,避免硬编码行数导致遗漏或多余行
  • 关键词预处理:通过trim()去除关键词前后空格,filter()过滤空值,避免因E1末尾逗号产生无效匹配
  • 不区分大小写匹配:将描述和关键词统一转为小写,提升匹配的兼容性
  • 批量读写优化:一次性读取所有描述、生成结果后一次性写入,符合Google Apps Script的性能最佳实践,减少API调用次数

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 10:05:03