【发布时间】:2018-05-30 13:16:58
【问题描述】:
我想清除所有过滤规则,但保留过滤器本身。
有没有直接快速的方法?
我找到的代码是:
var filter = sheet.getFilter();
它获取过滤器对象,我有filter#的选项数量是limited.
注意:filter.remove() 删除了这个过滤器,但我需要保留它。
【问题讨论】:
标签: google-apps-script google-sheets
我想清除所有过滤规则,但保留过滤器本身。
有没有直接快速的方法?
我找到的代码是:
var filter = sheet.getFilter();
它获取过滤器对象,我有filter#的选项数量是limited.
注意:filter.remove() 删除了这个过滤器,但我需要保留它。
【问题讨论】:
标签: google-apps-script google-sheets
我试过这段代码:
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);
}
这个速度要快得多。
参考文献
【讨论】:
您只想删除基本过滤器的条件,而不删除基本过滤器。如果我的理解是正确的,那么使用 Sheets API 怎么样?示例脚本如下。使用此脚本时,请在高级 Google 服务和 API 控制台中启用 Sheets API。
如果您现在要使用使用 Sheets API 的脚本打开脚本编辑器,则可以通过访问此 URL https://console.cloud.google.com/apis/library/sheets.googleapis.com/为项目启用 Sheets API
var 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);
如果这不是你想要的,我很抱歉。
【讨论】:
Max 的回答很好。但是,没有 API 的更快选项是这样的 - 只需删除过滤器,然后在没有任何条件的情况下将其添加回来:
var sheet = SpreadsheetApp.getActiveSheet();
var currentFilter = sheet.getFilter();
var filterRange = currentFilter.getRange();
currentFilter.remove();
// add filter back
filterRange.createFilter();
【讨论】: