首页 > 解决方案 > 如何在 Google 表格中刷新过滤器 onEdit()?

问题描述

我有一张表,根据我在下拉列表中选择的值,我用 Hlookups 填充数据。

每次更改下拉列表中的值(这会更改整个数据集)时,我都想过滤(隐藏)第 3 列中具有 NULL 或空白值的行。

如果我创建一个普通过滤器,它不会在数据更改时刷新。

var PARAMETER_ROW_NUMBER = 5; //The parameters goes from Row 1 to this Row
var PARAMETER_COLUMN_NUMBER = 2; //The column where the dropdowns with the parameters for the VLOOKUPs are


function onEdit() 
{
  var thisSheet = SpreadsheetApp.getActiveSheet();
  if( thisSheet.getName() == "By Place" ) 
  {
    var cell = thisSheet.getActiveCell();
    var cellRow = cell.getRow();
    var cellColumn = cell.getColumn();
    if( cellColumn == PARAMETER_COLUMN_NUMBER && cellRow <= PARAMETER_ROW_NUMBER)
    {
      setFilter(); // Execute the filter to clean null rows each time I change the values in the dropdowns
      var rowDiff = PARAMETER_ROW_NUMBER - cellRow;
      cell.offset( 1, 0, rowDiff).setValue(''); // As the parameters are dependent dropdowns, I clear the dropdowns if one changes
    }
    
  }
}

function setFilter() 
{
  var ss = SpreadsheetApp.getActiveSheet();
  var rang = ss.getDataRange();
  var filtercriteria = SpreadsheetApp.newFilterCriteria().setHiddenValues([' ','']).build();
  var filter = rang.getFilter() || rang.createFilter();
  filter.setColumnFilterCriteria(3, filtercriteria); // I want to hide the rows which has a null or blank in column 3
}

setFilter() 函数不起作用。

标签: google-apps-scriptgoogle-sheets

解决方案


您用于设置隐藏值的数组不正确,请尝试如下代码:

function setFilter() 
{
  var ss = SpreadsheetApp.getActiveSheet();
  var rang = ss.getDataRange();
  var filterCriteria = SpreadsheetApp
                         .newFilterCriteria()
                         .setHiddenValues(['NULL', ''])
                         .build();
  var filter = rang.getFilter() || rang.createFilter();
  filter.setColumnFilterCriteria(3, filterCriteria);
}

此外,如果您想查看onEdit执行的日志,您可以通过单击View -> Executions在您的 Apps 脚本文件中检查它们,在那里您将能够看到您遇到的错误。

文档

我使用这些文档来帮助您:


推荐阅读