为工作簿中的所有工作表更新多个过滤器视图范围的脚本

Script to Update Multiple Filter View Ranges for all sheets in workbook

这里有类似但不同的问题。

我在同一个工作簿中有几个 sheet,我想在其中设置一个触发器,以便在每个 sheet.

的所有筛选视图中更新范围。

我最好的解决方案是为工作簿中的每个 sheet 创建一个文件吗?

在你的情况下,下面的修改脚本怎么样?在这次修改中,我修改了.

处的示例脚本

修改后的脚本:

在您使用此脚本之前,please enable Sheets API at Advanced Google services。并且,请设置要更新的 sheet 个名称。

function UpdateFilterView() {
  var sheetNames = ["Sheet1", "Sheet3",,,];  // Please set the sheet names you want to update.

  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var spreadsheetId = ss.getId();
  var sheets = Sheets.Spreadsheets.get(spreadsheetId, { ranges: sheetNames, fields: "sheets(filterViews)" }).sheets;
  var requests = sheets.flatMap((s, i) => {
    var dataSheet = ss.getSheetByName(sheetNames[i]);
    var endRowIndex = dataSheet.getLastRow();
    var endColumnIndex = dataSheet.getLastColumn();
    var sheetId = dataSheet.getSheetId();
    return s.filterViews.map(({ filterViewId }) => ({ updateFilterView: { filter: { filterViewId, range: { sheetId, startRowIndex: 0, endRowIndex, startColumnIndex: 0, endColumnIndex } }, fields: "*" } }));
  });
  if (requests.length == 0) return;
  Sheets.Spreadsheets.batchUpdate({ requests: requests }, spreadsheetId);
}
  • 当此脚本为 运行 时,Google Spreadsheet 中特定 sheet 的所有过滤器视图都会更新。在这种情况下,使用一个API。

注:

  • 例如,当你想在一个Google Spreadsheet中的所有sheet中反映这个脚本时,你也可以使用下面的示例脚本。

      function sample() {
        var ss = SpreadsheetApp.getActiveSpreadsheet();
        var spreadsheetId = ss.getId();
        var sheets = Sheets.Spreadsheets.get(spreadsheetId, { fields: "sheets(filterViews)" }).sheets;
        var allSheets = ss.getSheets();
        var requests = sheets.flatMap((s, i) => {
          var dataSheet = allSheets[i];
          var endRowIndex = dataSheet.getLastRow();
          var endColumnIndex = dataSheet.getLastColumn();
          var sheetId = dataSheet.getSheetId();
          return s.filterViews ? s.filterViews.map(({ filterViewId }) => ({ updateFilterView: { filter: { filterViewId, range: { sheetId, startRowIndex: 0, endRowIndex, startColumnIndex: 0, endColumnIndex } }, fields: "*" } })) : [];
        });
        if (requests.length == 0) return;
        Sheets.Spreadsheets.batchUpdate({ requests: requests }, spreadsheetId);
      }
    

参考文献: