大家好,我尝试制作用于复制过滤数据的脚本,但我没有这样做。
我想自动将过滤的数据复制到另一张纸上
function RejectSave() {
var ss = SpreadsheetApp.getActive();
var DataSheet = ss.getSheetByName('Import')
ss.setActiveSheet(DataSheet, true);
var sheet = ss.getActiveSheet();
sheet.getRange(1, 1, sheet.getMaxRows(), sheet.getMaxColumns()).activate();
sheet.getRange(1, 1, sheet.getMaxRows(), sheet.getMaxColumns()).createFilter();
var criteria = SpreadsheetApp.newFilterCriteria()
.setHiddenValues(['', 'A', 'B', 'C'])
.build();
ss.getActiveSheet().getFilter().setColumnFilterCriteria(20, criteria);
var SaveSheet = ss.getSheetByName('RAW')
ss.setActiveSheet(SaveSheet, true);
ss.getActiveSheet().insertRowsAfter(ss.getActiveSheet().getMaxRows(), 5);
var SaveRange = SaveSheet.getRange(SaveSheet.getLastRow()+2, 1)
DataSheet.getRange(2, 1, DataSheet.getLastRow(), 26)
.copyTo(SaveRange, SpreadsheetApp.CopyPasteType.PASTE_VALUES, false);
DataSheet.getFilter().remove();
};
但是脚本不能仅带过滤的数据,它带该范围内的所有数据,无论是否满足过滤条件。
我只想复制经过过滤的数据!
答案 0 :(得分:0)
如果在编写脚本之前知道过滤条件,那么您可能应该使用JS array filter()
method而不是Google工作表getFilter()
。例如,以下函数过滤源范围A1:C10,不包括C列中具有特殊值的行。因此,它在起始单元格E1处设置了新的(过滤后的)数据数组(另请参见图像)。
function filtered() {
var sheet = SpreadsheetApp.getActiveSheet();
// Get full (non-filtered) data
var values = sheet.getRange('A1:C10').getValues();
// Apply filter criteria here
var hiddenValues = ['', 'A', 'B', 'C'];
values = values.filter(function(v) {
return hiddenValues.indexOf(v[2]) == -1;
});
// Set filtered data on the target sheet
sheet.getRange(1, 5, values.length, 3).setValues(values);
}
JS过滤非常灵活而且非常快捷。