用于更新多个Google表格过滤器视图范围的脚本

时间:2020-10-14 03:18:20

标签: google-apps-script google-sheets

我正在尝试使用以下脚本来更新表格中50多个个人过滤器视图上的范围。我使用下面的代码,我发现here,(顺便说一句非常有帮助!)。

我唯一的问题是,如果我有每个唯一的filterViewId,它的效果很好。是否有一种方法可以修改此脚本,以将更新后的范围应用于标题为“ MY SHEET”的工作表中的所有过滤器视图?

function UpdateFilterView() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();  
  var dataSheet = ss.getSheetByName('MY SHEET');  
  var lastRow = dataSheet.getLastRow();
  var lastColumn = dataSheet.getLastColumn();
  var sheetId = dataSheet.getSheetId();
  var filterSettings = {
    "filterViewId": "1099738202",
    "range":{
      "sheetId": sheetId,
      "startRowIndex": 0,
      "endRowIndex": lastRow,
      "startColumnIndex": 0,
      "endColumnIndex": lastColumn
    }
  };
  var requests = [{
    "updateFilterView":{
      "filter": filterSettings,
      "fields": "*",  
    }
  }];
  Sheets.Spreadsheets.batchUpdate({"requests":requests}, ss.getId());  
} 

1 个答案:

答案 0 :(得分:0)

我相信您的目标如下。

  • 您要使用Google Apps脚本更新Google Spreadsheet中工作表(“ MY SHEET”)的所有过滤器视图。
  • 所有过滤器视图的设置都相同。

修改点:

  • 在脚本中,工作表“ MY SHEET”的一个过滤器视图已更新。因此,在这种情况下,需要检索所有过滤器视图中的filterViewId
  • 为了检索所有过滤器视图中的filterViewId,我使用了Sheets API中的“ spreadsheets.get”方法。

当以上几点反映到您的脚本时,它如下所示。

修改后的脚本:

在使用此脚本please enable Sheets API at Advanced Google services之前,请启用V8运行时。

function UpdateFilterView() {
  var sheetName = "MY SHEET";  // Please set the sheet name.
  
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var dataSheet = ss.getSheetByName(sheetName);
  var lastRow = dataSheet.getLastRow();
  var lastColumn = dataSheet.getLastColumn();
  var sheetId = dataSheet.getSheetId();
  var spreadsheetId = ss.getId();
  var filterViews = Sheets.Spreadsheets.get(spreadsheetId, {ranges: [sheetName], fields: "sheets(filterViews)"}).sheets[0].filterViews;
  var requests = filterViews.map(e => ({
    updateFilterView: {
      filter: {
        filterViewId: e.filterViewId,
        range: {sheetId: sheetId, startRowIndex: 0, endRowIndex: lastRow, startColumnIndex: 0, endColumnIndex: lastColumn}
      },
      fields: "*",
    }
  }));
  Sheets.Spreadsheets.batchUpdate({requests: requests}, spreadsheetId);
}
  • 在此修改后的脚本中,首先,使用“ spreadsheets.get”方法检索所有过滤器视图的filterViewId并创建请求正文,然后,将请求正文与“电子表格.batchUpdate”。

参考文献: