是否有办法在Google表格中按脚本启用某个范围的数据过滤器?目前可以手动执行此操作,但我不想选择范围,然后单击“数据”,然后启用过滤器。
我知道过滤器将保留在现有工作表中。但是,我尝试对通过脚本生成的新电子表格应用过滤器。
我的想法是:
function foo() {
var spreadsheet = SpreadsheetApp.getActive();
var infoSheet = spreadsheet.insertSheet('sheetName', spreadsheet.getNumSheets());
infoSheet.getRange(1, 1, 5, 5). -> enable filter?
...
}
如何以编程方式实现目标?
答案 0 :(得分:4)
Filter
现在也可以在本地电子表格服务中使用,而无需通过“高级服务”激活表格REST API。
上面的Sheets REST API方法,适用于原生Apps脚本:
function applyFilter() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var dataSheet = ss.getActiveSheet();
var toFilter = dataSheet.getDataRange();
var filter = toFilter.createFilter();
// Make some criteria to filter with.
var fcb = SpreadsheetApp.newFilterCriteria();
/* use FilterCriteria methods */
fcb.whenCellNotEmpty();
// Filter the range based on the 1st column:
filter.setColumnFilterCriteria(1, fcb.build());
}
进一步阅读:
答案 1 :(得分:3)
现在,您可以使用Google工作表高级服务应用过滤器。 首先,您需要启用Google表格API。为此,请按照以下链接中提到的步骤进行操作:
https://developers.google.com/sheets/api/quickstart/apps-script
之后,您可以使用以下功能来应用过滤器。
function applyFilter() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var ssId = ss.getId();
var dataSheet = ss.getActiveSheet();
var lastRow = dataSheet.getLastRow();
var lastColumn = dataSheet.getLastColumn();
var sheetId = dataSheet.getSheetId();
var filterSettings = {
"range": {
"sheetId": sheetId,
"startRowIndex": 0,
"endRowIndex": lastRow,
"startColumnIndex": 0,
"endColumnIndex": lastColumn
}
};
var requests = [{
"setBasicFilter": {
"filter": filterSettings
}
}];
Sheets.Spreadsheets.batchUpdate({'requests': requests}, ssId);
}
答案 2 :(得分:2)
简短的回答是“不”。 似乎GAS既不支持获取,也不支持为列设置过滤条件,至少根据this open issue。
另一种解决方案是在GAS端进行过滤和排序,并将不同的结果推送到不同的列或表中。