【问题标题】: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。
示例:
带过滤器:
输出:
无过滤器:
输出:
参考: