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

Google Script实现工作表列含特定文本时触发执行自定义函数

原有代码缺陷
  • 未定义循环变量i,遍历取值逻辑无法执行
  • 判断条件匹配值写为250g,和需求要求的250P不一致
  • 原EXTRACT函数直接传入整列A区域到自定义公式,未做行级过滤,无法实现按A列值触发提取的逻辑
  • 未做目标表旧数据清理,容易出现历史数据残留
核心需求实现代码

替换原有零散函数即可,逻辑为遍历DATA表所有有效行,仅当A列值匹配250P时提取对应B列数据写入Result表,代码内已预留拆分、去空格等后续处理的位置:

function extractMatchedData() {
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const dataSheet = ss.getSheetByName('DATA');
  const resultSheet = ss.getSheetByName('Result');
  const allData = dataSheet.getDataRange().getValues();
  const matchedResult = [];

  // 若第一行是表头,将i初始值改为1即可跳过表头
  for (let i = 0; i < allData.length; i++) {
    const colAVal = String(allData[i][0]).trim();
    // 若需要不区分大小写匹配,将判断条件改为 colAVal.toLowerCase() === '250p'
    if (colAVal === '250P') {
      let colBVal = String(allData[i][1]).trim();
      // 后续拆分、去空格等处理逻辑可直接写在这里
      matchedResult.push([colBVal]);
    }
  }

  resultSheet.clearContents();
  if (matchedResult.length) {
    resultSheet.getRange(1, 1, matchedResult.length, 1).setValues(matchedResult);
  }
}

如果需要保留原有EXTRACTDATA自定义公式的处理逻辑,只需将上述代码中匹配到的行对应的B列区域传入公式即可,无需传入整列数据。

可选分表需求实现代码

提前在表格内创建名为Result_250、Result_500的两个工作表,运行以下代码即可将两类标注的数据分别存入对应工作表:

function extractByCategory() {
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const dataSheet = ss.getSheetByName('DATA');
  const sheet250 = ss.getSheetByName('Result_250');
  const sheet500 = ss.getSheetByName('Result_500');
  const allData = dataSheet.getDataRange().getValues();
  const list250 = [];
  const list500 = [];

  for (let i = 0; i < allData.length; i++) {
    const colAVal = String(allData[i][0]).trim();
    const colBVal = String(allData[i][1]).trim();
    // 可根据实际A列的500标识修改匹配值,例如标识为500P则改为'500P'
    if (colAVal === '250P') {
      list250.push([colBVal]);
    } else if (colAVal === '500P') {
      list500.push([colBVal]);
    }
  }

  sheet250.clearContents();
  sheet500.clearContents();
  if (list250.length) sheet250.getRange(1,1,list250.length,1).setValues(list250);
  if (list500.length) sheet500.getRange(1,1,list500.length,1).setValues(list500);
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.02 01:18:30