我使用以下函数在数据更改后刷新基本过滤器(过滤和排序):
function refreshDashboardFilter() {
let {
basicFilter
} = Sheets.Spreadsheets.get(spreadsheetID, {
ranges: ["Dashboard"],
fields: "sheets(basicFilter)"
}).sheets[0];
if (basicFilter) {
Sheets.Spreadsheets.batchUpdate({
requests: [{
setBasicFilter: {
filter: basicFilter
}
}]
}, spreadsheetID);
}
}
是否也可以以类似的方式刷新过滤器视图? 也许,两者使用相同的功能。
batchUpdate()
提出 updateFilterView
请求您可以使用另一个
Sheets.Spreadsheets.get()
方法来检索过滤器视图,然后使用另一个 batchUpdate()
来更新每个检索到的过滤器视图。每个过滤器视图都有一个唯一的 ID,因此每个过滤器视图都需要一个单独的 batchUpdate()
请求。
尝试对代码进行稍微修改的版本:
function refreshDashboardFilter() {
let {
basicFilter
} = Sheets.Spreadsheets.get(spreadsheetID, {
ranges: ["Dashboard"],
fields: "sheets(basicFilter)"
}).sheets[0];
//Retrieves all filter views in the sheet
let {
filterViews
} = Sheets.Spreadsheets.get(spreadsheetID, {
ranges: ["Dashboard"],
fields: "sheets(filterViews)"
}).sheets[0];
if (basicFilter) {
Sheets.Spreadsheets.batchUpdate({
requests: [{
setBasicFilter: {
filter: basicFilter
}
}]
}, spreadsheetID);
}
//Updates all fields of each filter view that was retrieved.
if (filterViews) {
filterViews.forEach(filterView => {
Sheets.Spreadsheets.batchUpdate({
requests: [{
updateFilterView: {
filter: filterView,
fields: "*"
}
}]
}, spreadsheetID);
})
}
}