【问题标题】:Script to Update Multiple Google Sheet Filter View Ranges用于更新多个 Google 表格过滤器视图范围的脚本
【发布时间】:2020-10-14 15:48:06
【问题描述】:

我正在尝试使用以下脚本更新表格中 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());  
} 

【问题讨论】:

  • 在你的情况下,比如有2个过滤视图,你想如何设置每个过滤视图的过滤器?
  • @tanaike 我想对每个过滤视图应用相同的设置,以便每个过滤视图的范围相同(范围需要更新以包含整个工作表)。
  • 感谢您的回复。根据您的回复,我提出了一个修改后的脚本作为答案。你能确认一下吗?如果这不是您期望的方向,我深表歉意。
  • 确认,您提供的修改后的脚本完全按照预期的方式更新单个工作表中所有 filterview 范围的范围。你节省了我几个小时的时间,非常感谢!
  • 感谢您的回复。我很高兴你的问题得到了解决。也谢谢你。

标签: google-apps-script google-sheets


【解决方案1】:

我相信你的目标如下。

  • 您希望使用 Google Apps 脚本更新 Google 电子表格中工作表(“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并创建请求体,然后使用“spreadsheets.get”的方法来使用请求体。批量更新”。

参考资料:

【讨论】:

    猜你喜欢
    • 2020-10-15
    • 1970-01-01
    • 2019-12-01
    • 1970-01-01
    • 2017-11-25
    • 1970-01-01
    • 1970-01-01
    • 2020-05-15
    • 1970-01-01
    相关资源
    最近更新 更多