我有一个脚本,可以复制第 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();
}
重复您的担忧,我建议您首先通过应用程序脚本删除
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
这就是您收到该错误消息的原因。
否则,您可能想选择另一种替代方法。
参考:删除过滤器