我有一个电子表格,其中设置了各种过滤器视图。通常,这很好用,但偶尔会添加新行,而我必须在每个过滤器视图中手动更新范围。我尝试过在线搜索解决方案,并想出了可能会更新范围的以下代码:
function UpdateFilterView() {
var dataSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Data');
//for each (var dataSheet in sheets){
var lastRow = dataSheet.getLastRow();
var lastColumn = dataSheet.getLastColumn();
var sheetId = dataSheet.getSheetId();
var filterSettings = {
"filterViewId": "319575141",
"range":{
"sheetId": sheetId,
"startRowIndex": 1,
"endRowIndex": lastRow,
"startColumnIndex": 1,
"endColumnIndex": lastColumn
}
//}
};
var requests = [{
"fields": "*",
"updateFilterView":{
"filter": filterSettings
}
}];
Sheets.Spreadsheets.batchUpdate({"requests":requests},sheetId);
}
我从发现的帖子(here)中获取了大部分代码,但是由于某种原因,它不会更新指定的过滤器。我想念什么吗?另外,当我运行代码“ ReferenceError:未定义工作表(第32行,文件“代码”)时,出现以下错误,该代码引用行“ Sheets.Spreadsheets .....”。
有什么想法甚至可能吗?
答案 0 :(得分:2)
从您的答复中,我可以确认,在您当前的情况下,高级Google服务已启用Sheets API。这样,我可以确认您的错误消息已更改。为了解决新问题,如何进行此修改?
sheetId
中的Sheets.Spreadsheets.batchUpdate({"requests":requests},sheetId);
修改为电子表格ID。"fields": "*"
的对象中包含updateFilterView
。修改脚本后,请进行以下修改。
function UpdateFilterView() {
var ss = SpreadsheetApp.getActiveSpreadsheet(); // Added
var dataSheet = ss.getSheetByName('Data'); // Modified
var lastRow = dataSheet.getLastRow();
var lastColumn = dataSheet.getLastColumn();
var sheetId = dataSheet.getSheetId();
var filterSettings = {
"filterViewId": "319575141",
"range":{
"sheetId": sheetId,
"startRowIndex": 1,
"endRowIndex": lastRow,
"startColumnIndex": 1,
"endColumnIndex": lastColumn
}
};
var requests = [{
"updateFilterView":{
"filter": filterSettings,
"fields": "*", // Modified
}
}];
Sheets.Spreadsheets.batchUpdate({"requests":requests}, ss.getId()); // Modified
}
filterViewId
中的319575141
不正确时,会发生类似Invalid value at 'requests[0].update_filter_view.filter.filter_view_id
的错误。请注意这一点。