脚本向下复制格式:在包含筛选出的行的范围上不受支持

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

我有一个脚本,可以复制第 2 行的格式并将格式粘贴到所有其他行。除非使用隐藏第 2 行的过滤器,否则工作正常,然后我收到以下错误消息:带有过滤掉的行的范围不支持此操作。

我希望脚本在启用或不启用过滤器的情况下格式化所有行,并且我宁愿不禁用过滤器,因为无论谁使用它,都可能仍然需要它。需要注意的是,问题只是第 2 行是否被过滤。

示例数据和测试工作簿链接

  var ss = SpreadsheetApp.getActiveSpreadsheet(); 
  var Sheet1 = ss.getSheetByName("Submissions");                                         // Team Member Sheet
  var master = Sheet1.getRange(2,1,1,Sheet1.getMaxColumns());
  var target = Sheet1.getRange(2,1,Sheet1.getMaxRows(),Sheet1.getMaxColumns());
  master.copyTo(target, SpreadsheetApp.CopyPasteType.PASTE_FORMAT, false);
}

只需添加一个 IF 来检查是否没有要删除的过滤器。 最终解决方案是

function Update_RowFormat() {
  var ss = SpreadsheetApp.getActiveSpreadsheet(); 
  var Sheet1 = ss.getSheetByName("Submissions");  // Team Member Sheet

  var filter = Sheet1.getFilter();
  if (filter !== null) {
    filter.remove();
    }
  SpreadsheetApp.flush() 
  var master = Sheet1.getRange(2,1,1,Sheet1.getMaxColumns());
  var target = Sheet1.getRange(2,1,Sheet1.getMaxRows(),Sheet1.getMaxColumns());
  master.copyTo(target, SpreadsheetApp.CopyPasteType.PASTE_FORMAT, false);
  SpreadsheetApp.flush()  
  var toFilter = Sheet1.getDataRange();
  var filter = toFilter.createFilter();
}
google-sheets google-apps-script
1个回答
1
投票

重复您的担忧,我建议您首先通过应用程序脚本删除

filter
,如下所示:

function Update_RowFormat() {
  var ss = SpreadsheetApp.getActiveSpreadsheet(); 
  var Sheet1 = ss.getSheetByName("Submissions");  // Team Member Sheet

  var currentFilter = Sheet1.getFilter();
  currentFilter.remove();

  var master = Sheet1.getRange(2,1,1,Sheet1.getMaxColumns());
  var target = Sheet1.getRange(2,1,Sheet1.getMaxRows(),Sheet1.getMaxColumns());
  master.copyTo(target, SpreadsheetApp.CopyPasteType.PASTE_FORMAT, false);
}

这将运行脚本而不会出现错误,但缺点是,您必须手动重新应用过滤器,因为

behavior of Google sheets filter is whenever you filter out certain rows, it won't treat them as part of the table
这就是您收到该错误消息的原因。

否则,您可能想选择另一种替代方法。

参考:删除过滤器

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