【问题标题】:Google Sheet check for filter always goes to true谷歌表格检查过滤器总是为真
【发布时间】:2021-02-09 17:24:29
【问题描述】:

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

 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.. {}

【问题讨论】:

    标签: google-apps-script google-sheets filtering spreadsheet


    【解决方案1】:

    感谢您的提问。我玩弄了这个。运行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());
      }
    }
    

    【讨论】:

      【解决方案2】:

      根据文件:

      getFilter() - 返回此工作表中的过滤器,如果没有过滤器,则返回 null。

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

      我还尝试复制您的代码,如果整个工作表没有过滤器,它只会设置为 false。

      示例:

      带过滤器:

      输出:

      无过滤器:

      输出:

      参考:

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-10-19
        • 1970-01-01
        • 2013-01-21
        • 1970-01-01
        • 2021-12-22
        • 1970-01-01
        • 1970-01-01
        • 2021-04-29
        相关资源
        最近更新 更多