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());
}
}
为什么这总是对的?我如何检查它是否真的被过滤了?
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());
}
}