我想清除所有过滤规则,但保留过滤器本身。
有直接而快速的方法吗?
我找到的代码是:
var filter = sheet.getFilter();
它获取过滤器对象,我对过滤器#的选项数量为limited.
注意:filter.remove()
删除了此过滤器,但我需要保留它。
答案 0 :(得分:3)
我已尝试过此代码:
function deleteFilterCriterias(sheet)
{
var filter = sheet.getFilter();
if (!(filter)) { return -1; }
var rangeF = filter.getRange();
var cols = rangeF.getWidth();
var col = rangeF.getColumn();
for (var i = col; i <= cols; i++)
{
// remove filter criteria for each column
filter.removeColumnFilterCriteria(i)
}
return 0;
}
但对我来说似乎很笨拙。
在answer by @Tanaike之后,我尝试了Sheets API。
我在一张纸上重置过滤器的代码是:
function deleteFilterCriterias2(sheet)
{
var ssId = sheet.getParent().getId();
var range = sheet.getFilter().getRange();
var rowStart = range.getRow() - 1;
var colStart = range.getColumn() - 1;
// settings to reset filter
var filterSettings = {
"range": {
"sheetId": sheet.getSheetId(),
"startRowIndex": rowStart,
"endRowIndex": range.getHeight() + rowStart,
"startColumnIndex": colStart + colStart,
"endColumnIndex": range.getWidth()
}
};
var requests = [{
"setBasicFilter": {
"filter": filterSettings
}
}];
// api request
Sheets.Spreadsheets.batchUpdate({'requests': requests}, ssId);
}
这个更快。
<强>参考强>
答案 1 :(得分:2)
在删除基本过滤器时,您只想删除基本过滤器的条件。如果我的理解是正确的,那么如何使用Sheets API?示例脚本如下。使用此脚本时,请在Advanced Google Services和API控制台上启用Sheets API。
如果您现在使用使用Sheets API的脚本打开脚本编辑器,则可以通过访问此URL https://console.cloud.google.com/apis/library/sheets.googleapis.com/
为项目启用Sheets APIvar id = SpreadsheetApp.getActiveSpreadsheet().getId();
var filters = Sheets.Spreadsheets.get(id, {fields: "sheets/basicFilter"});
var resource = {requests: filters.sheets.filter(function(e){return Object.keys(e).length}).map(function(e){return {setBasicFilter: {filter: {range: e.basicFilter.range}}}})};
Sheets.Spreadsheets.batchUpdate(resource, id);
如果这不是你想要的,我很抱歉。
答案 2 :(得分:0)
Max的回答很好。但是,这是没有API的更快选择-只需删除过滤器,然后不加任何条件地将其重新添加:
var sheet = SpreadsheetApp.getActiveSheet();
var currentFilter = sheet.getFilter();
var filterRange = currentFilter.getRange();
currentFilter.remove();
// add filter back
filterRange.createFilter();