Google Sheet 检查过滤器总是为真

Google Sheet check for filter always goes to true

为什么这总是对的?我如何检查它是否真的被过滤了?

 var list = SpreadsheetApp.openByUrl(url);
var SS = list.getSheetByName("Sheet 1");

if (SS.getFilter() !== null && SS.getFilter() != {}) {
  console.log("have populated filter..", SS.getFilter());

}

当前输出:have populated filter.. {}

基于文档:

getFilter() - Returns the filter in this sheet, or null if there is no filter.

如果 sheet 有 1 个或多个过滤器,无论范围如何,这将始终有价值。

我也试过复制你的代码,如果整个 sheet 没有过滤器,它只会设置为 false。

示例:

带过滤器:

输出:

没有过滤器:

输出:

参考:

感谢提问。我玩这个。 运行 getFilter:

实际上需要相当长的时间

这是我所做的:

function messinwithmysheetsfilter() {
  const ss = SpreadsheetApp.getActive();
  const sh = ss.getSheetByName('Sheet1');
  let f = sh.getFilter();
  console.log(typeof f)
  if (f != null && typeof f == 'object') {
    console.log('Frozen: '+Object.isFrozen(f));
    console.log('Sealed: '+Object.isSealed(f));
    console.log('Extensible: '+Object.isExtensible(f));
    console.log('OwnProperies: '+Object.getOwnPropertyNames(f));
    console.log('toString(): '+ f.toString());
    console.log('getRange: ' + f.getRange().getA1Notation());
  }
}

控制台日志结果:

11:54:32 AM Notice  Execution started
11:54:33 AM Info    Frozen: false
11:54:33 AM Info    Sealed: false
11:54:33 AM Info    Extensible: true
11:54:33 AM Info    OwnProperies: toString,remove,sort,getRange,getColumnFilterCriteria,getColumnSortSpec,setColumnFilterCriteria,removeColumnFilterCriteria
11:54:33 AM Info    toString(): Filter
11:54:33 AM Info    getRange: A1:Z63
11:54:33 AM Notice  Execution completed

也许你可以从我做的事情中学到一些东西。

你实际上可以像我下面那样重写你的条件:

function messinwithmysheetsfilter() {
  const ss = SpreadsheetApp.getActive();
  const sh = ss.getSheetByName('Sheet1');
  let f = sh.getFilter();
  //console.log(typeof f)
  if (f != null && f.toString()=='Filter') {//use the results of the filters toString() method which should  be 'Filter'
    console.log('Frozen: '+Object.isFrozen(f));
    console.log('Sealed: '+Object.isSealed(f));
    console.log('Extensible: '+Object.isExtensible(f));
    console.log('OwnProperies: '+Object.getOwnPropertyNames(f));
    console.log('toString(): '+ f.toString());
    console.log('getRange: ' + f.getRange().getA1Notation());
  }
}