【发布时间】:2019-12-01 21:06:57
【问题描述】:
我有一个非常大的工作表,其中包含多个团队的多个选项卡,每个选项卡都有针对每个人的个性化过滤器,所有这些当前都定期更新,并且随着新的订单项添加到工作表中而手动更新。如何编写一个 Google 脚本来识别其中包含数据 (ANY) 的最后一行和最后一列 - 然后将范围从 A1 扩展到新的结束单元格并将此工作表上的每个过滤器范围更新为此?
我为此使用的大多数示例代码只是为新范围创建了一个新的过滤器视图并删除了以前的 - 但我希望在每个工作表上更新 5 到 20 个个人过滤器定期。 编辑我提供了我为此编写的示例代码,这不是复制的,而是使用 UpdateFilterView 请求文档中可用的内容。我不知道我是否正确设置了引用“filterSettings”的过滤器字段,并且不知道在“字段”部分中使用什么。此外,我无法判断 batchUpdate 是否设置正确。
EDIT #2 7.24.2019 - 当前代码的设置如下所示,当前收到一个无效的 JSON 有效负载错误,显示
API call to sheets.spreadsheets.batchUpdate failed with error: Invalid JSON payload received. Unknown name "fields" at 'requests[0]': Cannot find field.
Invalid value at 'requests[0].update_filter_view.filter.filter_view_id' (TYPE_INT32), "*" Invalid JSON payload received.
Unknown name "sheet_id" at 'requests[0].update_filter_view.filter.range': Cannot find field. (line 27, file "macros")
function UpdateFilterView() {
var sheets=SpreadsheetApp.getActiveSpreadsheet().getSheets();
for each (var dataSheet in sheets){
var lastRow = dataSheet.getLastRow();
var lastColumn = dataSheet.getLastColumn();
var sheetId = dataSheet.getSheetId();
var filterSettings = {
"filterViewId": "*",
"range":{
"sheetID": sheetId,
"startRowIndex": 0,
"endRowIndex": lastRow,
"startColumnIndex": 0,
"endColumnIndex": lastColumn
}
}
};
var requests = [{
"fields": "*",
"updateFilterView":{
"filter": filterSettings
}
}];
Sheets.Spreadsheets.batchUpdate({"requests":requests},sheetId);
}
我希望每个个性化过滤器都会为每个工作表上的每个个性化过滤器更新 OnEdit()。
【问题讨论】:
-
你有尝试过什么吗?你已经有代码了吗?
-
@ross 为此添加了一些示例代码,这太可怕了 - 但感谢您查看
标签: google-apps-script dynamic filter google-sheets