【问题标题】:Filter based on header name instead of column position google sheets基于标题名称而不是列位置谷歌表过滤
【发布时间】:2020-04-28 23:05:31
【问题描述】:

我的情况与VBA, Advanced Filter Based on Header 几乎相同,但在 googlesheets 中。

我希望基于标题而不是列索引来过滤列,因为它们并不总是在同一列中。 (少数标题名称:候选人 ID、姓名、简历)

这段代码根据列位置过滤

` var cidFilter = SpreadsheetApp.newFilterCriteria().whenTextStartsWith("CID").build();   
  var filter = range.getFilter() || range.createFilter();
    filter.setColumnFilterCriteria(17,cidFilter);`

我希望它根据标题 (候选人 ID) 而不是位置 (17,cidFilter) 进行过滤

【问题讨论】:

    标签: google-apps-script google-sheets filter


    【解决方案1】:

    您可以找到包含indexOf() 标题的列

    示例:

      var headers = SpreadsheetApp.getActive().getSheetByName("Sheet1").getRange("A1:G1").getValues()[0]; // adjust accordingly to your header range
      var column=headers.indexOf("Candidate ID")+1;
      if(column >0){
        filter.setColumnFilterCriteria(column,cidFilter);
      }
    

    更新:

    如果要应用两个过滤条件,请执行以下操作:

      var column=headers.indexOf("Candidate ID")+1;
      var column2=headers.indexOf("Are you currently under a non-solicit agreement ?")+1;
      if(column > 0){
        filter.setColumnFilterCriteria(column,cidFilter);
      }
      if(column2 > 0){
        filter.setColumnFilterCriteria(column2,nonSolicit);
      }      
    

    【讨论】:

    • 效果很好!小查询(对不起)如果我想添加额外的标题,我应该再次输入你给出的整个代码吗?问这个是因为我必须过滤 4 列(候选人 ID、姓名、简历和 URL)
    • 在我的示例中,标题位于"A1:G1" 范围内 - 您可以根据需要调整范围。并且可以使用headers.indexOf("NAME OF HEADER")+1;查询每个header的位置
    • 我试过了,但它只考虑一列用于过滤我已将我编辑的内容放入问题中,请查看出现了什么问题以及需要做什么
    • 我明白了。对于每个标题,您需要为各自的列创建一个新变量 - 请参阅我更新的答案。
    • 非常感谢!这种方法也适用于复制粘贴吗?现在询问它是否复制了错误的数据...我想复制“候选人 ID”列并将其粘贴到下一列,无论“候选人 ID”列在哪里
    猜你喜欢
    • 2022-07-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多