首页 > 解决方案 > Google 脚本:检索过滤器的默认值

问题描述

我想为电子表格中的列创建过滤器,然后检索为过滤器创建的默认条件值列表。我相信我的代码返回一个没有任何值的 Filter 对象。

function TestFilter(){
  var spreadsheet = SpreadsheetApp.getActive();
  var sheet = spreadsheet.getActiveSheet();
  sheet.getRange(1, 2, sheet.getMaxRows(), 1).createFilter();
  var filter = sheet.getFilter();
  var output = filter.getColumnFilterCriteria(2).getCriteriaValues();
  return output;
}

标签: javascriptgoogle-apps-scriptgoogle-sheets

解决方案


您可以为此使用以下功能:

如果您的过滤器设置为隐藏所有可能的值,您将通过使用函数获得所需的值getHiddenValues()

但是,如果您的过滤器仅隐藏您的值的子集,则这是不可能的。对于这种情况,您可以使用如下所示的 Google Apps 脚本函数来获取不同的值:

function getDistinctValues(range) {
  var values = range.getValues();
  var unique = {};

  for (var i=0; i<values.length; i++) {
    for (var j=0; j<values[i].length; j++) {
      var key = values[i][j];
      if (key !== null && key !== undefined && key !== '')
        unique[key] = true;
    }
  }

  return Object.keys(unique);
}

如果您试图在 A 列上获取不同的值,它的用法是:

var distinctValues = getDistinctValues(sheet.getRange("A2:A"));

请注意,此函数将值作为字符串返回。如果您想获取实际的数值而不是字符串,您可以使用以下代码简单地解析这些值:

var distinctValues = getDistinctValues(sheet.getRange("A2:A")).map(parseFloat);

推荐阅读