【问题标题】:How to use the Filter tool via Google Sheets Scripts如何通过 Google 表格脚本使用过滤器工具
【发布时间】:2021-03-31 11:27:12
【问题描述】:

我想要一个函数,它从一个单元格中获取一个值,并在我在另一张表中的过滤器中使用它来仅过滤该值。我该怎么做?

提前谢谢你。

【问题讨论】:

  • 我无法理解a filter that I have in another sheet。我为此道歉。我可以问你目标的细节吗?
  • 我在工作表中有一个表格,其中有一个由 Google 表格中的过滤器工具提供的过滤器。我基本上想要一个函数来将参数归因于该过滤器。
  • 你好,我发了an answer,希望对你有帮助。

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


【解决方案1】:

我相信类过滤器中有这样的功能

https://developers.google.com/apps-script/reference/spreadsheet/filter

但是,可能有更好的方法来实现您的目标。就个人而言,我建议使用 QUERY() 函数。 2ns 参数是表示 SELECT 语句的字符串,可以根据工作表中的值轻松构建。这是我的一个项目中的一个示例:

=query(Schedule!A:F, "SELECT B,D,E,F WHERE C='"&A1&"' AND E > date '"&TEXT(CurrentDate,"yyyy-mm-dd")&"' ORDER BY B, E",1)

CurrentDate 是另一个工作表中的命名范围

【讨论】:

    【解决方案2】:

    解决办法:

    代码sn-p:

    function filterValues() {
      const ss = SpreadsheetApp.getActive();
      const sourceSheet = ss.getSheetByName("Source"); // Change
      const filterSheet = ss.getSheetByName("Filter"); // Change
      const a1Notation = "A1"; // Change
      const value = sourceSheet.getRange(a1Notation).getValue();
      const filter = filterSheet.getFilter();
      const columnIndex = 2; // Change
      const filterValues = filterSheet.getRange(2,columnIndex,filterSheet.getLastRow()-1)
                                      .getValues().flat();
      const hideValues = filterValues.filter(current => current !== value);
      const filterCriteria = SpreadsheetApp.newFilterCriteria()
                                           .setHiddenValues(hideValues)
                                           .build();
      filter.setColumnFilterCriteria(columnIndex, filterCriteria);
    }
    

    注意:

    • 在上面的示例中,用作条件的列是B,所以columnIndex=2。此外,工作表被命名为SourceFilter,所需的值位于SourceA1 中。请根据您的喜好更改所有这些。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-03
      • 1970-01-01
      • 2014-11-10
      • 2022-11-18
      • 1970-01-01
      相关资源
      最近更新 更多