Google Apps 脚本刷新过滤器视图以及基本过滤器

问题描述 投票:0回答:1

我使用以下函数在数据更改后刷新基本过滤器(过滤和排序):

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);
  }
}

是否也可以以类似的方式刷新过滤器视图? 也许,两者使用相同的功能。

google-apps-script
1个回答
0
投票

建议:致电
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);
    })
  }
}

参考:

© www.soinside.com 2019 - 2024. All rights reserved.