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

如何用单个条件同时筛选多列,显示符合条件的行?

解决方案

要实现A、C、E任意一列包含指定文本即显示对应行的筛选效果,核心是利用whenFormulaSatisfied方法编写行级判断逻辑——注意不能用FILTER数组公式,因为筛选条件需要的是单个单元格返回布尔值的表达式,而非范围返回结果。

修改后的完整代码

function showPrompt() {
  var ui = SpreadsheetApp.getUi(); 
  var result = ui.prompt(
    '请输入筛选关键词',
    '关键词:',
    ui.ButtonSet.OK_CANCEL);
  var button = result.getSelectedButton();
  var title = result.getResponseText();
  if (button == ui.Button.OK) {
    createFilter(title);
  } 
}

function createFilter(title) {
  var spreadsheet = SpreadsheetApp.getActive();
  var sheet = spreadsheet.getActiveSheet();
  
  // 移除现有筛选
  var existingFilter = sheet.getFilter();
  if(existingFilter){
    existingFilter.remove();
  }
  
  // 创建新筛选
  var dataRange = sheet.getRange(1, 1, sheet.getMaxRows(), sheet.getMaxColumns());
  dataRange.createFilter();
  
  // 转义关键词中的双引号,避免公式语法错误
  var escapedTitle = title.replace(/"/g, '""');
  
  // 构建筛选条件:判断当前行A/C/E列是否包含关键词
  var criteria = SpreadsheetApp.newFilterCriteria()
    .whenFormulaSatisfied(`=OR(ISNUMBER(SEARCH("${escapedTitle}",A1)),ISNUMBER(SEARCH("${escapedTitle}",C1)),ISNUMBER(SEARCH("${escapedTitle}",E1)))`)
    .build();
  
  // 将条件应用到第一列(任意列均可,公式是针对整行的逻辑判断)
  sheet.getFilter().setColumnFilterCriteria(1, criteria);
};

关键说明

  1. 公式逻辑:

    • SEARCH("关键词",A1):在A1单元格中查找关键词,找到则返回位置,否则返回错误
    • ISNUMBER(...):将SEARCH结果转为布尔值(找到为TRUE,否则FALSE)
    • OR(...):只要A/C/E任意一列满足条件,整行就返回TRUE,即显示该行
    • 公式中A1/C1/E1是相对引用,筛选会自动将其应用到每一行(比如第二行对应A2/C2/E2)
  2. 双引号转义:
    如果用户输入的关键词包含双引号,直接写入公式会导致语法错误,因此用title.replace(/"/g, '""')把单个双引号替换为两个(Google Sheets公式的双引号转义规则)

  3. 代码优化:
    原代码中重复获取激活范围的逻辑被简化,直接用sheet.getFilter()获取现有筛选,比通过范围获取更高效

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 03:49:52