Reputation: 23
Hello Everybody I tried to make scripts for copying filtered data but I did not make it.
I want to copy filtered data to another sheet automatically
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();
};
but the script cannot bring just filtered data, it brings all data in that range, whether it meets the filter criteria or not.
I want to copy just filtered data!!
Upvotes: 2
Views: 3586
Reputation: 1175
If the filter criteria is known before writing a script, then you probably should use JS array filter()
method instead of Google sheet getFilter()
. For example, the following function filters the source range A1:C10, excluding the rows with special values in column C. As a result it sets new (filtered) data array at start cell E1 (see also image).
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 filtering is flexible and rather quick.
Upvotes: 1